diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index 813e5dbed6..9eae75b8ef 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -926,20 +926,18 @@ def regroup(parser, token): {% regroup people|dictsort:"gender" by gender as grouped %} """ - firstbits = token.contents.split(None, 3) - if len(firstbits) != 4: + bits = token.contents.split() + if len(bits) != 6: raise TemplateSyntaxError, "'regroup' tag takes five arguments" - target = parser.compile_filter(firstbits[1]) - if firstbits[2] != 'by': + target = parser.compile_filter(bits[1]) + if bits[2] != 'by': raise TemplateSyntaxError("second argument to 'regroup' tag must be 'by'") - lastbits_reversed = firstbits[3][::-1].split(None, 2) - if lastbits_reversed[1][::-1] != 'as': + if bits[4] != 'as': raise TemplateSyntaxError("next-to-last argument to 'regroup' tag must" " be 'as'") - expression = parser.compile_filter(lastbits_reversed[2][::-1]) - - var_name = lastbits_reversed[0][::-1] + expression = parser.compile_filter(bits[3]) + var_name = bits[5] return RegroupNode(target, expression, var_name) regroup = register.tag(regroup) diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py index 846023afc9..bbe3902f5b 100644 --- a/tests/regressiontests/templates/tests.py +++ b/tests/regressiontests/templates/tests.py @@ -807,6 +807,16 @@ class Templates(unittest.TestCase): '{% endfor %},' + \ '{% endfor %}', {}, ''), + + # Test syntax. + 'regroup03': ('{% regroup data by bar as %}', {}, + template.TemplateSyntaxError), + 'regroup04': ('{% regroup data by bar thisaintright grouped %}', {}, + template.TemplateSyntaxError), + 'regroup05': ('{% regroup data thisaintright bar as grouped %}', {}, + template.TemplateSyntaxError), + 'regroup06': ('{% regroup data by bar as grouped toomanyargs %}', {}, + template.TemplateSyntaxError), ### TEMPLATETAG TAG ####################################################### 'templatetag01': ('{% templatetag openblock %}', {}, '{%'),