]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Support if/else expressions in parser
authorKevin <kevin@kevin-brown.com>
Tue, 12 May 2020 01:10:08 +0000 (21:10 -0400)
committerKevin <kevin@kevin-brown.com>
Tue, 12 May 2020 01:10:08 +0000 (21:10 -0400)
new_parser.py
test_template.jinja

index 4b93237e32e44910644065bd143e902816add580..ea79e95d779e69722edbb99f55ae7e0e8558fcf5 100644 (file)
@@ -279,6 +279,9 @@ def parse_conditional_expression(ast):
     if 'comparator' in ast:\r
         return parse_conditional_expression_comparator(ast)\r
 \r
+    if 'test_expression' in ast:\r
+        return parse_conditional_expression_if(ast)\r
+\r
     if 'logical_operator' in ast:\r
         return parse_conditional_expression_logical(ast)\r
 \r
@@ -308,6 +311,21 @@ def parse_conditional_expression_comparator(ast):
         lineno=lineno_from_parseinfo(ast['parseinfo'])\r
     )\r
 \r
+def parse_conditional_expression_if(ast):\r
+    test = parse_conditional_expression(ast['test_expression'])\r
+    expr1 = parse_variable(ast['true_value'])\r
+    expr2 = None\r
+\r
+    if 'false_value' in ast:\r
+        expr2 = parse_variable(ast['false_value'])\r
+\r
+    return nodes.CondExpr(\r
+        test,\r
+        expr1,\r
+        expr2,\r
+        lineno=lineno_from_parseinfo(ast['parseinfo'])\r
+    )\r
+\r
 def parse_conditional_expression_logical(ast):\r
     node_class_map = {\r
         'and': nodes.And,\r
@@ -429,7 +447,7 @@ def parse_output(ast):
 def parse_print(ast):\r
     variable = ast['name']\r
 \r
-    node = parse_variable(variable)\r
+    node = parse_conditional_expression(variable)\r
 \r
     return nodes.Output([node])\r
 \r
index e1044544b1e5d2188c1e7c8b31e726b8e2cd5126..afad4325d86b1c01bab3c6c4e249ab2dd9546799 100644 (file)
@@ -63,4 +63,5 @@ across lines #}
 <ul{{ {'class': 'my_list', 'missing': none,\r
         'id': 'list-%d'|format(variable)}|xmlattr }}>\r
 ...\r
-</ul>
\ No newline at end of file
+</ul>\r
+{{ "[{}]".format(page.title) if page.title }}
\ No newline at end of file