magic-removal: Merged to [2294]

git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2295 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2006-02-10 05:10:38 +00:00
parent 9d809f2c3b
commit 27ec1bc29d
10 changed files with 1224 additions and 1190 deletions

View File

@ -113,6 +113,9 @@ TEMPLATE_CONTEXT_PROCESSORS = (
# 'django.core.context_processors.request',
)
# Output to use in template system for invalid (e.g. misspelled) variables.
TEMPLATE_STRING_IF_INVALID = ''
# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
# trailing slash.
# Examples: "http://foo.com/media/", "/media/".

File diff suppressed because it is too large Load Diff

View File

@ -55,7 +55,7 @@ msgstr "選択された %s"
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
msgstr ""
msgstr "選択してクリック"
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"

View File

@ -58,7 +58,6 @@ import re
from inspect import getargspec
from django.utils.functional import curry
from django.conf import settings
from django.conf import settings
from django.template.context import Context, RequestContext
__all__ = ('Template', 'Context', 'RequestContext', 'compile_string')
@ -541,7 +540,7 @@ class FilterExpression(object):
try:
obj = resolve_variable(self.var, context)
except VariableDoesNotExist:
obj = ''
obj = settings.TEMPLATE_STRING_IF_INVALID
for func, args in self.filters:
arg_vals = []
for lookup, arg in args:
@ -610,7 +609,7 @@ def resolve_variable(path, context):
try:
current = number_type(path)
except ValueError:
current = ''
current = settings.TEMPLATE_STRING_IF_INVALID
elif path[0] in ('"', "'") and path[0] == path[-1]:
current = path[1:-1]
else:
@ -624,17 +623,17 @@ def resolve_variable(path, context):
current = getattr(current, bits[0])
if callable(current):
if getattr(current, 'alters_data', False):
current = ''
current = settings.TEMPLATE_STRING_IF_INVALID
else:
try: # method call (assuming no args required)
current = current()
except TypeError: # arguments *were* required
# GOTCHA: This will also catch any TypeError
# raised in the function itself.
current = '' # invalid method call
current = settings.TEMPLATE_STRING_IF_INVALID # invalid method call
except Exception, e:
if getattr(e, 'silent_variable_failure', False):
current = ''
current = settings.TEMPLATE_STRING_IF_INVALID
else:
raise
except (TypeError, AttributeError):

View File

@ -33,7 +33,7 @@ class Context:
for dict in self.dicts:
if dict.has_key(key):
return dict[key]
return ''
return settings.TEMPLATE_STRING_IF_INVALID
def __delitem__(self, key):
"Delete a variable from the current context"

View File

@ -621,6 +621,18 @@ Default: ``('django.template.loaders.filesystem.load_template_source',)``
A tuple of callables (as strings) that know how to import templates from
various sources. See the `template documentation`_.
TEMPLATE_STRING_IF_INVALID
--------------------------
Default: ``''`` (Empty string)
**New in Django development version.**
Output, as a string, that the template system should use for invalid (e.g.
misspelled) variables. See `How invalid variables are handled`_.
.. _How invalid variables are handled: http://www.djangoproject.com/documentation/templates_python/#how-invalid-variables-are-handled
TIME_FORMAT
-----------

View File

@ -70,6 +70,12 @@ Use a dot (``.``) to access attributes of a variable.
In the above example, ``{{ section.title }}`` will be replaced with the
``title`` attribute of the ``section`` object.
In Django 0.91, if you use a variable that doesn't exist, it will be silently
ignored; the variable will be replaced by nothingness. In the Django
development version, if a variable doesn't exist, the template system inserts
the value of the ``TEMPLATE_STRING_IF_INVALID`` setting, which is set to ``''``
(the empty string) by default.
If you use a variable that doesn't exist, it will be silently ignored. The
variable will be replaced by nothingness.

View File

@ -135,14 +135,6 @@ Here are a few examples::
>>> t.render(c)
"The first stooge in the list is Larry."
If a variable doesn't exist, the template system fails silently. The variable
is replaced with an empty string::
>>> t = Template("My name is {{ my_name }}.")
>>> c = Context({"foo": "bar"})
>>> t.render(c)
"My name is ."
Method lookups are slightly more complex than the other lookup types. Here are
some things to keep in mind:
@ -199,6 +191,28 @@ some things to keep in mind:
self.database_record.delete()
sensitive_function.alters_data = True
How invalid variables are handled
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In Django 0.91, if a variable doesn't exist, the template system fails
silently. The variable is replaced with an empty string::
>>> t = Template("My name is {{ my_name }}.")
>>> c = Context({"foo": "bar"})
>>> t.render(c)
"My name is ."
This applies to any level of lookup::
>>> t = Template("My name is {{ person.fname }} {{ person.lname }}.")
>>> c = Context({"person": {"fname": "Stan"}})
>>> t.render(c)
"My name is Stan ."
In the Django development version, if a variable doesn't exist, the template
system inserts the value of the ``TEMPLATE_STRING_IF_INVALID`` setting, which
is set to ``''`` (the empty string) by default.
Playing with Context objects
----------------------------