Author: lukeplant
Date: 2010-09-07 15:30:46 -0500 (Tue, 07 Sep 2010)
New Revision: 13690
Modified:
django/trunk/django/template/defaulttags.py
django/trunk/tests/regressiontests/templates/tests.py
Log:
Fixed #13475 - for tag raises an exception when trying to unpack a non-iterable
item
Thanks to SmileyChris for the report and patch.
Modified: django/trunk/django/template/defaulttags.py
===================================================================
--- django/trunk/django/template/defaulttags.py 2010-09-07 20:26:23 UTC (rev
13689)
+++ django/trunk/django/template/defaulttags.py 2010-09-07 20:30:46 UTC (rev
13690)
@@ -157,15 +157,22 @@
loop_dict['first'] = (i == 0)
loop_dict['last'] = (i == len_values - 1)
+ pop_context = False
if unpack:
# If there are multiple loop variables, unpack the item into
# them.
- context.update(dict(zip(self.loopvars, item)))
+ try:
+ unpacked_vars = dict(zip(self.loopvars, item))
+ except TypeError:
+ pass
+ else:
+ pop_context = True
+ context.update(unpacked_vars)
else:
context[self.loopvars[0]] = item
for node in self.nodelist_loop:
nodelist.append(node.render(context))
- if unpack:
+ if pop_context:
# The loop variables were pushed on to the context so pop them
# off again. This is necessary because the tag lets the length
# of loopvars differ to the length of each set of items and we
Modified: django/trunk/tests/regressiontests/templates/tests.py
===================================================================
--- django/trunk/tests/regressiontests/templates/tests.py 2010-09-07
20:26:23 UTC (rev 13689)
+++ django/trunk/tests/regressiontests/templates/tests.py 2010-09-07
20:30:46 UTC (rev 13690)
@@ -701,6 +701,7 @@
'for-tag-unpack11': ("{% for x,y,z in items %}{{ x }}:{{ y }},{{ z
}}/{% endfor %}", {"items": (('one', 1), ('two', 2))}, ("one:1,/two:2,/",
"one:1,INVALID/two:2,INVALID/")),
'for-tag-unpack12': ("{% for x,y,z in items %}{{ x }}:{{ y }},{{ z
}}/{% endfor %}", {"items": (('one', 1, 'carrot'), ('two', 2))},
("one:1,carrot/two:2,/", "one:1,carrot/two:2,INVALID/")),
'for-tag-unpack13': ("{% for x,y,z in items %}{{ x }}:{{ y }},{{ z
}}/{% endfor %}", {"items": (('one', 1, 'carrot'), ('two', 2, 'cheese'))},
("one:1,carrot/two:2,cheese/", "one:1,carrot/two:2,cheese/")),
+ 'for-tag-unpack14': ("{% for x,y in items %}{{ x }}:{{ y }}/{%
endfor %}", {"items": (1, 2)}, (":/:/", "INVALID:INVALID/INVALID:INVALID/")),
'for-tag-empty01': ("{% for val in values %}{{ val }}{% empty
%}empty text{% endfor %}", {"values": [1, 2, 3]}, "123"),
'for-tag-empty02': ("{% for val in values %}{{ val }}{% empty
%}values array empty{% endfor %}", {"values": []}, "values array empty"),
'for-tag-empty03': ("{% for val in values %}{{ val }}{% empty
%}values array not found{% endfor %}", {}, "values array not found"),
--
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.