]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Add support for import block parsing
authorKevin <kevin@kevin-brown.com>
Tue, 12 May 2020 03:00:29 +0000 (23:00 -0400)
committerKevin <kevin@kevin-brown.com>
Tue, 12 May 2020 03:00:29 +0000 (23:00 -0400)
new_parser.py
test_template.jinja

index f786b9f7fd7c26cb3d79af57197b9cdba80769bd..89f4910418ad630be16b829d1dd6559f61e85fa2 100644 (file)
@@ -73,6 +73,9 @@ def parse_block(ast):
     if block_name == 'from':\r
         return parse_block_from(ast)\r
 \r
+    if block_name == 'import':\r
+        return parse_block_import(ast)\r
+\r
     if block_name == 'include':\r
         return parse_block_include(ast)\r
 \r
@@ -188,17 +191,16 @@ def parse_block_from(ast):
     else:\r
         del parameters[-2:]\r
 \r
-    if len(parameters) > 2:\r
-        for parameter in parameters[2:]:\r
-            if 'alias' in parameter['value']:\r
-                names.append(\r
-                    (\r
-                        parameter['value']['variable'],\r
-                        parameter['value']['alias']\r
-                    )\r
+    for parameter in parameters[2:]:\r
+        if 'alias' in parameter['value']:\r
+            names.append(\r
+                (\r
+                    parameter['value']['variable'],\r
+                    parameter['value']['alias']\r
                 )\r
-            else:\r
-                names.append(parameter['value']['variable'])\r
+            )\r
+        else:\r
+            names.append(parameter['value']['variable'])\r
 \r
     from_import = nodes.FromImport(\r
         template,\r
@@ -223,6 +225,23 @@ def parse_block_if(ast):
         lineno=lineno_from_parseinfo(ast['parseinfo'])\r
     )\r
 \r
+def parse_block_import(ast):\r
+    block_parameters = ast['block']['parameters']\r
+\r
+    template = parse_variable(block_parameters[0]['value'])\r
+    target = None\r
+    with_context = _parse_import_context(block_parameters) or False\r
+\r
+    if len(block_parameters) > 2 and block_parameters[1]['value']['variable'] == 'as':\r
+        target = parse_variable(block_parameters[2]['value']).name\r
+\r
+    return nodes.Import(\r
+        template,\r
+        target,\r
+        with_context,\r
+        lineno=lineno_from_parseinfo(ast['parseinfo'])\r
+    )\r
+\r
 def parse_block_include(ast):\r
     block_parameters = ast['block']['parameters']\r
 \r
index 9651b8e07a7f82f22124d72430d4c27c54cf51e8..603e192074ce2f70e5f4a2c9dbcd1e04cd6135e0 100644 (file)
@@ -72,4 +72,5 @@ across lines #}
 {{ not (foo and bar) }}\r
 {{ foo not in bar }}\r
 {% from 'forms.html' import input with context %}\r
-{% include 'header.html' without context %}
\ No newline at end of file
+{% include 'header.html' without context %}\r
+{% import 'forms.html' as forms %}
\ No newline at end of file