mirror of https://github.com/django/django.git
Fixed #3753 -- Allow optional display of invalid variable name in
TEMPLATE_STRING_IF_INVALID. Thanks, Matt McClanahan. git-svn-id: http://code.djangoproject.com/svn/django/trunk@5167 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
77ec8ae811
commit
faa31732ca
2
AUTHORS
2
AUTHORS
|
@ -147,7 +147,7 @@ answer newbie questions, and generally made Django that much better:
|
||||||
lerouxb@gmail.com
|
lerouxb@gmail.com
|
||||||
Waylan Limberg <waylan@gmail.com>
|
Waylan Limberg <waylan@gmail.com>
|
||||||
limodou
|
limodou
|
||||||
mattmcc
|
Matt McClanahan <http://mmcc.cx/>
|
||||||
Martin Maney <http://www.chipy.org/Martin_Maney>
|
Martin Maney <http://www.chipy.org/Martin_Maney>
|
||||||
masonsimon+django@gmail.com
|
masonsimon+django@gmail.com
|
||||||
Manuzhai
|
Manuzhai
|
||||||
|
|
|
@ -99,6 +99,10 @@ libraries = {}
|
||||||
# global list of libraries to load by default for a new parser
|
# global list of libraries to load by default for a new parser
|
||||||
builtins = []
|
builtins = []
|
||||||
|
|
||||||
|
# True if TEMPLATE_STRING_IF_INVALID contains a format string (%s). None means
|
||||||
|
# uninitialised.
|
||||||
|
invalid_var_format_string = None
|
||||||
|
|
||||||
class TemplateSyntaxError(Exception):
|
class TemplateSyntaxError(Exception):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
try:
|
try:
|
||||||
|
@ -575,6 +579,11 @@ class FilterExpression(object):
|
||||||
obj = None
|
obj = None
|
||||||
else:
|
else:
|
||||||
if settings.TEMPLATE_STRING_IF_INVALID:
|
if settings.TEMPLATE_STRING_IF_INVALID:
|
||||||
|
global invalid_var_format_string
|
||||||
|
if invalid_var_format_string is None:
|
||||||
|
invalid_var_format_string = '%s' in settings.TEMPLATE_STRING_IF_INVALID
|
||||||
|
if invalid_var_format_string:
|
||||||
|
return settings.TEMPLATE_STRING_IF_INVALID % self.var
|
||||||
return settings.TEMPLATE_STRING_IF_INVALID
|
return settings.TEMPLATE_STRING_IF_INVALID
|
||||||
else:
|
else:
|
||||||
obj = settings.TEMPLATE_STRING_IF_INVALID
|
obj = settings.TEMPLATE_STRING_IF_INVALID
|
||||||
|
|
|
@ -212,21 +212,24 @@ template tags. If an invalid variable is provided to one of these template
|
||||||
tags, the variable will be interpreted as ``None``. Filters are always
|
tags, the variable will be interpreted as ``None``. Filters are always
|
||||||
applied to invalid variables within these template tags.
|
applied to invalid variables within these template tags.
|
||||||
|
|
||||||
|
If ``TEMPLATE_STRING_IF_INVALID`` contains a ``'%s'``, the format marker will
|
||||||
|
be replaced with the name of the invalid variable.
|
||||||
|
|
||||||
.. admonition:: For debug purposes only!
|
.. admonition:: For debug purposes only!
|
||||||
|
|
||||||
While ``TEMPLATE_STRING_IF_INVALID`` can be a useful debugging tool,
|
While ``TEMPLATE_STRING_IF_INVALID`` can be a useful debugging tool,
|
||||||
it is a bad idea to turn it on as a 'development default'.
|
it is a bad idea to turn it on as a 'development default'.
|
||||||
|
|
||||||
Many templates, including those in the Admin site, rely upon the
|
Many templates, including those in the Admin site, rely upon the
|
||||||
silence of the template system when a non-existent variable is
|
silence of the template system when a non-existent variable is
|
||||||
encountered. If you assign a value other than ``''`` to
|
encountered. If you assign a value other than ``''`` to
|
||||||
``TEMPLATE_STRING_IF_INVALID``, you will experience rendering
|
``TEMPLATE_STRING_IF_INVALID``, you will experience rendering
|
||||||
problems with these templates and sites.
|
problems with these templates and sites.
|
||||||
|
|
||||||
Generally, ``TEMPLATE_STRING_IF_INVALID`` should only be enabled
|
Generally, ``TEMPLATE_STRING_IF_INVALID`` should only be enabled
|
||||||
in order to debug a specific template problem, then cleared
|
in order to debug a specific template problem, then cleared
|
||||||
once debugging is complete.
|
once debugging is complete.
|
||||||
|
|
||||||
Playing with Context objects
|
Playing with Context objects
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
|
|
@ -586,6 +586,8 @@ class Templates(unittest.TestCase):
|
||||||
'invalidstr03': ('{% for v in var %}({{ v }}){% endfor %}', {}, ''),
|
'invalidstr03': ('{% for v in var %}({{ v }}){% endfor %}', {}, ''),
|
||||||
'invalidstr04': ('{% if var %}Yes{% else %}No{% endif %}', {}, 'No'),
|
'invalidstr04': ('{% if var %}Yes{% else %}No{% endif %}', {}, 'No'),
|
||||||
'invalidstr04': ('{% if var|default:"Foo" %}Yes{% else %}No{% endif %}', {}, 'Yes'),
|
'invalidstr04': ('{% if var|default:"Foo" %}Yes{% else %}No{% endif %}', {}, 'Yes'),
|
||||||
|
'invalidstr05': ('{{ var }}', {}, ('', 'INVALID %s', 'var')),
|
||||||
|
'invalidstr06': ('{{ var.prop }}', {'var': {}}, ('', 'INVALID %s', 'var.prop')),
|
||||||
|
|
||||||
### MULTILINE #############################################################
|
### MULTILINE #############################################################
|
||||||
|
|
||||||
|
@ -737,6 +739,7 @@ class Templates(unittest.TestCase):
|
||||||
|
|
||||||
# Set TEMPLATE_STRING_IF_INVALID to a known string
|
# Set TEMPLATE_STRING_IF_INVALID to a known string
|
||||||
old_invalid = settings.TEMPLATE_STRING_IF_INVALID
|
old_invalid = settings.TEMPLATE_STRING_IF_INVALID
|
||||||
|
expected_invalid_str = 'INVALID'
|
||||||
|
|
||||||
for name, vals in tests:
|
for name, vals in tests:
|
||||||
install()
|
install()
|
||||||
|
@ -744,6 +747,10 @@ class Templates(unittest.TestCase):
|
||||||
if isinstance(vals[2], tuple):
|
if isinstance(vals[2], tuple):
|
||||||
normal_string_result = vals[2][0]
|
normal_string_result = vals[2][0]
|
||||||
invalid_string_result = vals[2][1]
|
invalid_string_result = vals[2][1]
|
||||||
|
if '%s' in invalid_string_result:
|
||||||
|
expected_invalid_str = 'INVALID %s'
|
||||||
|
invalid_string_result = invalid_string_result % vals[2][2]
|
||||||
|
template.invalid_var_format_string = True
|
||||||
else:
|
else:
|
||||||
normal_string_result = vals[2]
|
normal_string_result = vals[2]
|
||||||
invalid_string_result = vals[2]
|
invalid_string_result = vals[2]
|
||||||
|
@ -754,7 +761,7 @@ class Templates(unittest.TestCase):
|
||||||
activate('en-us')
|
activate('en-us')
|
||||||
|
|
||||||
for invalid_str, result in [('', normal_string_result),
|
for invalid_str, result in [('', normal_string_result),
|
||||||
('INVALID', invalid_string_result)]:
|
(expected_invalid_str, invalid_string_result)]:
|
||||||
settings.TEMPLATE_STRING_IF_INVALID = invalid_str
|
settings.TEMPLATE_STRING_IF_INVALID = invalid_str
|
||||||
try:
|
try:
|
||||||
output = loader.get_template(name).render(template.Context(vals[1]))
|
output = loader.get_template(name).render(template.Context(vals[1]))
|
||||||
|
@ -768,6 +775,10 @@ class Templates(unittest.TestCase):
|
||||||
if 'LANGUAGE_CODE' in vals[1]:
|
if 'LANGUAGE_CODE' in vals[1]:
|
||||||
deactivate()
|
deactivate()
|
||||||
|
|
||||||
|
if template.invalid_var_format_string:
|
||||||
|
expected_invalid_str = 'INVALID'
|
||||||
|
template.invalid_var_format_string = False
|
||||||
|
|
||||||
loader.template_source_loaders = old_template_loaders
|
loader.template_source_loaders = old_template_loaders
|
||||||
deactivate()
|
deactivate()
|
||||||
settings.TEMPLATE_DEBUG = old_td
|
settings.TEMPLATE_DEBUG = old_td
|
||||||
|
|
Loading…
Reference in New Issue