)\r
\r
def parse_block_for(ast):\r
- target = None\r
iter = None\r
body = ast['contents']\r
else_ = []\r
\r
block_parameters = ast['start']['parameters']\r
\r
- if block_parameters[0]['value']['operator'] == 'in':\r
- block_parameters[0:1] = [\r
- {\r
- "value": block_parameters[0]['value']['left']\r
- },\r
- {\r
- "value": {\r
- "variable": "in"\r
- }\r
- },\r
- {\r
- "value": block_parameters[0]['value']['right']\r
- },\r
- ]\r
+ target = []\r
+ for param_number, param in enumerate(block_parameters):\r
+ if param['value']['variable'] == 'in':\r
+ break\r
+\r
+ if param['value']['operator'] == 'in':\r
+ block_parameters[param_number:param_number + 1] = [\r
+ {\r
+ "value": param['value']['left']\r
+ },\r
+ {\r
+ "value": {\r
+ "variable": "in"\r
+ }\r
+ },\r
+ {\r
+ "value": param['value']['right']\r
+ },\r
+ ]\r
+\r
+ target.append(\r
+ parse_variable(\r
+ param['value']['left'],\r
+ variable_context='store'\r
+ )\r
+ )\r
\r
- if block_parameters[1]['value']['variable'] != 'in':\r
- raise\r
+ break\r
\r
- target = parse_variable(block_parameters[0]['value'], variable_context='store')\r
- iter = parse_variable(block_parameters[2]['value'])\r
+ target.append(parse_variable(param['value'], variable_context='store'))\r
+\r
+ if len(target) == 0:\r
+ raise TemplateSyntaxError(\r
+ "expected token 'in'",\r
+ lineno=lineno_from_parseinfo(ast['start']['parseinfo'])\r
+ )\r
\r
- if not isinstance(target, (nodes.Name, nodes.Tuple)):\r
+ if len(target) == len(block_parameters):\r
raise TemplateSyntaxError(\r
"expected token 'in'",\r
- lineno=target.lineno\r
+ lineno=target[1].lineno\r
)\r
\r
- if len(block_parameters) > 3:\r
- if block_parameters[3]['value']['variable'] == 'if':\r
- test = parse_conditional_expression(block_parameters[4]['value'])\r
+ if len(target) == 1:\r
+ target = target[0]\r
+ else:\r
+ target = nodes.Tuple(\r
+ target,\r
+ 'store',\r
+ lineno=target[0].lineno\r
+ )\r
+ param_number += 2\r
+\r
+ iter = parse_variable(block_parameters[param_number]['value'])\r
+ param_number += 1\r
+\r
+ if len(block_parameters) > param_number + 1:\r
+ if block_parameters[param_number]['value']['variable'] == 'if':\r
+ param_number += 1\r
+\r
+ test = parse_conditional_expression(\r
+ block_parameters[param_number]['value']\r
+ )\r
+ param_number += 1\r
+\r
+ if len(block_parameters) > param_number + 2:\r
+ raise\r
\r
- if len(block_parameters) > 3:\r
- recursive = block_parameters[-1]['value']['variable'] == 'recursive'\r
+ if len(block_parameters) == param_number + 1:\r
+ recursive = block_parameters[param_number]['value']['variable'] == 'recursive'\r
\r
else_ = _split_contents_at_block(ast['contents'], 'else')\r
\r