Author: mtredinnick
Date: 2007-03-09 00:12:15 -0600 (Fri, 09 Mar 2007)
New Revision: 4690

Modified:
   django/trunk/django/template/__init__.py
   django/trunk/tests/regressiontests/templates/tests.py
Log:
Fixed #3670 -- Fixed template argument parsing so that it understands negative
floats and integers as numeric types. Patch from SmileyChris.


Modified: django/trunk/django/template/__init__.py
===================================================================
--- django/trunk/django/template/__init__.py    2007-03-09 05:47:39 UTC (rev 
4689)
+++ django/trunk/django/template/__init__.py    2007-03-09 06:12:15 UTC (rev 
4690)
@@ -91,6 +91,8 @@
 tag_re = re.compile('(%s.*?%s|%s.*?%s|%s.*?%s)' % (re.escape(BLOCK_TAG_START), 
re.escape(BLOCK_TAG_END),
                                           re.escape(VARIABLE_TAG_START), 
re.escape(VARIABLE_TAG_END),
                                           re.escape(COMMENT_TAG_START), 
re.escape(COMMENT_TAG_END)))
+# matches if the string is valid number
+number_re = re.compile(r'[-+]?(\d+|\d*\.\d+)$')
 
 # global dictionary of libraries that have been loaded using get_library
 libraries = {}
@@ -632,12 +634,9 @@
 
     (The example assumes VARIABLE_ATTRIBUTE_SEPARATOR is '.')
     """
-    if path[0].isdigit():
+    if number_re.match(path):
         number_type = '.' in path and float or int
-        try:
-            current = number_type(path)
-        except ValueError:
-            current = settings.TEMPLATE_STRING_IF_INVALID
+        current = number_type(path)
     elif path[0] in ('"', "'") and path[0] == path[-1]:
         current = path[1:-1]
     else:

Modified: django/trunk/tests/regressiontests/templates/tests.py
===================================================================
--- django/trunk/tests/regressiontests/templates/tests.py       2007-03-09 
05:47:39 UTC (rev 4689)
+++ django/trunk/tests/regressiontests/templates/tests.py       2007-03-09 
06:12:15 UTC (rev 4690)
@@ -401,6 +401,20 @@
             'ifequal-split09': (r"{% ifequal a 'slash\man' %}yes{% else %}no{% 
endifequal %}", {'a': r"slash\man"}, "yes"),
             'ifequal-split10': (r"{% ifequal a 'slash\man' %}yes{% else %}no{% 
endifequal %}", {'a': r"slashman"}, "no"),
 
+            # NUMERIC RESOLUTION
+            'ifequal-numeric01': ('{% ifequal x 5 %}yes{% endifequal %}', 
{'x': '5'}, ''),
+            'ifequal-numeric02': ('{% ifequal x 5 %}yes{% endifequal %}', 
{'x': 5}, 'yes'),
+            'ifequal-numeric03': ('{% ifequal x 5.2 %}yes{% endifequal %}', 
{'x': 5}, ''),
+            'ifequal-numeric04': ('{% ifequal x 5.2 %}yes{% endifequal %}', 
{'x': 5.2}, 'yes'),
+            'ifequal-numeric05': ('{% ifequal x 0.2 %}yes{% endifequal %}', 
{'x': .2}, 'yes'),
+            'ifequal-numeric06': ('{% ifequal x .2 %}yes{% endifequal %}', 
{'x': .2}, 'yes'),
+            'ifequal-numeric07': ('{% ifequal x 2. %}yes{% endifequal %}', 
{'x': 2}, ''),
+            'ifequal-numeric08': ('{% ifequal x "5" %}yes{% endifequal %}', 
{'x': 5}, ''),
+            'ifequal-numeric09': ('{% ifequal x "5" %}yes{% endifequal %}', 
{'x': '5'}, 'yes'),
+            'ifequal-numeric10': ('{% ifequal x -5 %}yes{% endifequal %}', 
{'x': -5}, 'yes'),
+            'ifequal-numeric11': ('{% ifequal x -5.2 %}yes{% endifequal %}', 
{'x': -5.2}, 'yes'),
+            'ifequal-numeric12': ('{% ifequal x +5 %}yes{% endifequal %}', 
{'x': 5}, 'yes'),
+
             ### IFNOTEQUAL TAG 
########################################################
             'ifnotequal01': ("{% ifnotequal a b %}yes{% endifnotequal %}", 
{"a": 1, "b": 2}, "yes"),
             'ifnotequal02': ("{% ifnotequal a b %}yes{% endifnotequal %}", 
{"a": 1, "b": 1}, ""),


--~--~---------~--~----~------------~-------~--~----~
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