Author: mtredinnick
Date: 2007-05-07 22:36:16 -0500 (Mon, 07 May 2007)
New Revision: 5167

Modified:
   django/trunk/AUTHORS
   django/trunk/django/template/__init__.py
   django/trunk/docs/templates_python.txt
   django/trunk/tests/regressiontests/templates/tests.py
Log:
Fixed #3753 -- Allow optional display of invalid variable name in
TEMPLATE_STRING_IF_INVALID. Thanks, Matt McClanahan.


Modified: django/trunk/AUTHORS
===================================================================
--- django/trunk/AUTHORS        2007-05-08 03:20:49 UTC (rev 5166)
+++ django/trunk/AUTHORS        2007-05-08 03:36:16 UTC (rev 5167)
@@ -147,7 +147,7 @@
     [EMAIL PROTECTED]
     Waylan Limberg <[EMAIL PROTECTED]>
     limodou
-    mattmcc
+    Matt McClanahan <http://mmcc.cx/>
     Martin Maney <http://www.chipy.org/Martin_Maney>
     [EMAIL PROTECTED]
     Manuzhai

Modified: django/trunk/django/template/__init__.py
===================================================================
--- django/trunk/django/template/__init__.py    2007-05-08 03:20:49 UTC (rev 
5166)
+++ django/trunk/django/template/__init__.py    2007-05-08 03:36:16 UTC (rev 
5167)
@@ -99,6 +99,10 @@
 # global list of libraries to load by default for a new parser
 builtins = []
 
+# True if TEMPLATE_STRING_IF_INVALID contains a format string (%s). None means
+# uninitialised.
+invalid_var_format_string = None
+
 class TemplateSyntaxError(Exception):
     def __str__(self):
         try:
@@ -575,6 +579,11 @@
                 obj = None
             else:
                 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
                 else:
                     obj = settings.TEMPLATE_STRING_IF_INVALID

Modified: django/trunk/docs/templates_python.txt
===================================================================
--- django/trunk/docs/templates_python.txt      2007-05-08 03:20:49 UTC (rev 
5166)
+++ django/trunk/docs/templates_python.txt      2007-05-08 03:36:16 UTC (rev 
5167)
@@ -212,21 +212,24 @@
 tags, the variable will be interpreted as ``None``. Filters are always
 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!
 
-    While ``TEMPLATE_STRING_IF_INVALID`` can be a useful debugging tool, 
-    it is a bad idea to turn it on as a 'development default'. 
+    While ``TEMPLATE_STRING_IF_INVALID`` can be a useful debugging tool,
+    it is a bad idea to turn it on as a 'development default'.
     
-    Many templates, including those in the Admin site, rely upon the 
-    silence of the template system when a non-existent variable is 
+    Many templates, including those in the Admin site, rely upon the
+    silence of the template system when a non-existent variable is
     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.
     
-    Generally, ``TEMPLATE_STRING_IF_INVALID`` should only be enabled 
-    in order to debug a specific template problem, then cleared 
+    Generally, ``TEMPLATE_STRING_IF_INVALID`` should only be enabled
+    in order to debug a specific template problem, then cleared
     once debugging is complete.
-        
+
 Playing with Context objects
 ----------------------------
 

Modified: django/trunk/tests/regressiontests/templates/tests.py
===================================================================
--- django/trunk/tests/regressiontests/templates/tests.py       2007-05-08 
03:20:49 UTC (rev 5166)
+++ django/trunk/tests/regressiontests/templates/tests.py       2007-05-08 
03:36:16 UTC (rev 5167)
@@ -586,6 +586,8 @@
             'invalidstr03': ('{% for v in var %}({{ v }}){% endfor %}', {}, 
''),
             'invalidstr04': ('{% if var %}Yes{% else %}No{% endif %}', {}, 
'No'),
             'invalidstr04': ('{% if var|default:"Foo" %}Yes{% else %}No{% 
endif %}', {}, 'Yes'),
+            'invalidstr05': ('{{ var }}', {}, ('', 'INVALID %s', 'var')),
+            'invalidstr06': ('{{ var.prop }}', {'var': {}}, ('', 'INVALID %s', 
'var.prop')),
 
             ### MULTILINE 
#############################################################
 
@@ -737,6 +739,7 @@
 
         # Set TEMPLATE_STRING_IF_INVALID to a known string
         old_invalid = settings.TEMPLATE_STRING_IF_INVALID
+        expected_invalid_str = 'INVALID'
 
         for name, vals in tests:
             install()
@@ -744,6 +747,10 @@
             if isinstance(vals[2], tuple):
                 normal_string_result = vals[2][0]
                 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:
                 normal_string_result = vals[2]
                 invalid_string_result = vals[2]
@@ -754,7 +761,7 @@
                 activate('en-us')
 
             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
                 try:
                     output = 
loader.get_template(name).render(template.Context(vals[1]))
@@ -768,6 +775,10 @@
             if 'LANGUAGE_CODE' in vals[1]:
                 deactivate()
 
+            if template.invalid_var_format_string:
+                expected_invalid_str = 'INVALID'
+                template.invalid_var_format_string = False
+
         loader.template_source_loaders = old_template_loaders
         deactivate()
         settings.TEMPLATE_DEBUG = old_td


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to