]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Support block-set in toplevel situations when extends is used
authorArmin Ronacher <armin.ronacher@active-4.com>
Sat, 31 Dec 2016 00:11:20 +0000 (01:11 +0100)
committerArmin Ronacher <armin.ronacher@active-4.com>
Sat, 31 Dec 2016 00:11:20 +0000 (01:11 +0100)
CHANGES
jinja2/compiler.py
tests/test_regression.py

diff --git a/CHANGES b/CHANGES
index e92c3719f993bbd49c539f5f5707cf8b5f37c37b..9a29db23eff8d5b200022b0dbc7271696c632672 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -14,6 +14,7 @@ Version 2.9
 - Added policies for filter defaults and similar things.
 - urlize now sets "rel noopener" by default.
 - Support attribute fallback for old-style classes in 2.x.
+- Support toplevel set statements in extend situations.
 
 Version 2.8.2
 -------------
index 056d60eaa021ae4839ee78514d6c612d418d20b9..0fe0d9203718db0339dbe7b75348c2fa83c4711b 100644 (file)
@@ -1458,6 +1458,10 @@ class CodeGenerator(NodeVisitor):
 
     def visit_AssignBlock(self, node, frame):
         block_frame = frame.inner()
+        # This is a special case.  Since a set block always captures we
+        # will disable output checks.  This way one can use set blocks
+        # toplevel even in extended templates.
+        block_frame.require_output_check = False
         block_frame.inspect(node.body)
         aliases = self.push_scope(block_frame)
         self.pull_locals(block_frame)
index cd46c8c85f19d23ff7f60f9a733d7e62f7c90505..951e8d4a556f24307a2e6484dab5d66234aab7b2 100644 (file)
@@ -284,3 +284,10 @@ class TestBug():
         class Foo:
             x = 42
         assert env.getitem(Foo(), 'x') == 42
+
+    def test_block_set_with_extends(self):
+        env = Environment(loader=DictLoader({
+            'main': '{% block body %}[{{ x }}]{% endblock %}',
+        }))
+        t = env.from_string('{% extends "main" %}{% set x %}42{% endset %}')
+        assert t.render() == '[42]'