\r
node = parse_variable(variable)\r
\r
- for accessor_ast in variable['accessors']:\r
- node = parse_variable_accessor(node, accessor_ast)\r
-\r
return nodes.Output([node])\r
\r
def parse_template(ast):\r
return nodes.Template(parse(ast), lineno=1)\r
\r
-def parse_variable(ast):\r
- ast = ast['variable']\r
+def parse_variable(ast, variable_context='load'):\r
+ name = ast['variable']\r
\r
- if 'literal_type' in ast:\r
- return parse_literal(ast)\r
+ if 'literal_type' in name:\r
+ node = parse_literal(name)\r
+ else:\r
+ node = nodes.Name(\r
+ name,\r
+ variable_context,\r
+ lineno=lineno_from_parseinfo(ast['parseinfo'])\r
+ )\r
\r
- return nodes.Name(\r
- ast,\r
- 'load'\r
- )\r
+ for accessor_ast in ast['accessors']:\r
+ node = parse_variable_accessor(node, accessor_ast)\r
+\r
+ if ast['filters']:\r
+ for filter_ast in ast['filters']:\r
+ node = parse_variable_filter(node, filter_ast)\r
+\r
+ return node\r
\r
def parse_variable_accessor(node, ast):\r
accessor_type = ast['accessor_type']\r
accessor_node.ctx = "load"\r
accessor_node.lineno = lineno_from_parseinfo(ast['parseinfo'])\r
\r
- return accessor_node
\ No newline at end of file
+ return accessor_node\r
+\r
+def parse_variable_filter(node, ast):\r
+ args = []\r
+ kwargs = []\r
+ dynamic_args = None\r
+ dynamic_kwargs = None\r
+\r
+ if 'arguments' in ast:\r
+ for argument in ast['arguments']:\r
+ value = parse_variable(argument['value'])\r
+\r
+ if 'key' in argument:\r
+ kwargs.append(\r
+ nodes.Keyword(argument['key'], value)\r
+ )\r
+ else:\r
+ args.append(value)\r
+\r
+ return nodes.Filter(\r
+ node,\r
+ ast['name'],\r
+ args,\r
+ kwargs,\r
+ dynamic_args,\r
+ dynamic_kwargs,\r
+ lineno=lineno_from_parseinfo(ast['parseinfo'])\r
+ )\r