Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Fixed #3670 -- Fixed template argument parsing so that it understands…

… negative

floats and integers as numeric types. Patch from SmileyChris.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@4690 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 82485694719a19faccdd90f61ac84bf8076b48c2 1 parent b6eee02
Malcolm Tredinnick authored March 09, 2007
9  django/template/__init__.py
@@ -91,6 +91,8 @@
91 91
 tag_re = re.compile('(%s.*?%s|%s.*?%s|%s.*?%s)' % (re.escape(BLOCK_TAG_START), re.escape(BLOCK_TAG_END),
92 92
                                           re.escape(VARIABLE_TAG_START), re.escape(VARIABLE_TAG_END),
93 93
                                           re.escape(COMMENT_TAG_START), re.escape(COMMENT_TAG_END)))
  94
+# matches if the string is valid number
  95
+number_re = re.compile(r'[-+]?(\d+|\d*\.\d+)$')
94 96
 
95 97
 # global dictionary of libraries that have been loaded using get_library
96 98
 libraries = {}
@@ -632,12 +634,9 @@ def resolve_variable(path, context):
632 634
 
633 635
     (The example assumes VARIABLE_ATTRIBUTE_SEPARATOR is '.')
634 636
     """
635  
-    if path[0].isdigit():
  637
+    if number_re.match(path):
636 638
         number_type = '.' in path and float or int
637  
-        try:
638  
-            current = number_type(path)
639  
-        except ValueError:
640  
-            current = settings.TEMPLATE_STRING_IF_INVALID
  639
+        current = number_type(path)
641 640
     elif path[0] in ('"', "'") and path[0] == path[-1]:
642 641
         current = path[1:-1]
643 642
     else:
14  tests/regressiontests/templates/tests.py
@@ -401,6 +401,20 @@ def test_templates(self):
401 401
             'ifequal-split09': (r"{% ifequal a 'slash\man' %}yes{% else %}no{% endifequal %}", {'a': r"slash\man"}, "yes"),
402 402
             'ifequal-split10': (r"{% ifequal a 'slash\man' %}yes{% else %}no{% endifequal %}", {'a': r"slashman"}, "no"),
403 403
 
  404
+            # NUMERIC RESOLUTION
  405
+            'ifequal-numeric01': ('{% ifequal x 5 %}yes{% endifequal %}', {'x': '5'}, ''),
  406
+            'ifequal-numeric02': ('{% ifequal x 5 %}yes{% endifequal %}', {'x': 5}, 'yes'),
  407
+            'ifequal-numeric03': ('{% ifequal x 5.2 %}yes{% endifequal %}', {'x': 5}, ''),
  408
+            'ifequal-numeric04': ('{% ifequal x 5.2 %}yes{% endifequal %}', {'x': 5.2}, 'yes'),
  409
+            'ifequal-numeric05': ('{% ifequal x 0.2 %}yes{% endifequal %}', {'x': .2}, 'yes'),
  410
+            'ifequal-numeric06': ('{% ifequal x .2 %}yes{% endifequal %}', {'x': .2}, 'yes'),
  411
+            'ifequal-numeric07': ('{% ifequal x 2. %}yes{% endifequal %}', {'x': 2}, ''),
  412
+            'ifequal-numeric08': ('{% ifequal x "5" %}yes{% endifequal %}', {'x': 5}, ''),
  413
+            'ifequal-numeric09': ('{% ifequal x "5" %}yes{% endifequal %}', {'x': '5'}, 'yes'),
  414
+            'ifequal-numeric10': ('{% ifequal x -5 %}yes{% endifequal %}', {'x': -5}, 'yes'),
  415
+            'ifequal-numeric11': ('{% ifequal x -5.2 %}yes{% endifequal %}', {'x': -5.2}, 'yes'),
  416
+            'ifequal-numeric12': ('{% ifequal x +5 %}yes{% endifequal %}', {'x': 5}, 'yes'),
  417
+
404 418
             ### IFNOTEQUAL TAG ########################################################
405 419
             'ifnotequal01': ("{% ifnotequal a b %}yes{% endifnotequal %}", {"a": 1, "b": 2}, "yes"),
406 420
             'ifnotequal02': ("{% ifnotequal a b %}yes{% endifnotequal %}", {"a": 1, "b": 1}, ""),

0 notes on commit 8248569

Please sign in to comment.
Something went wrong with that request. Please try again.