diff options
author | Armin Ronacher <armin.ronacher@active-4.com> | 2013-05-19 13:25:43 +0100 |
---|---|---|
committer | Armin Ronacher <armin.ronacher@active-4.com> | 2013-05-19 13:25:43 +0100 |
commit | 5cf31686c3709bd7f10e750752df92873bdde941 (patch) | |
tree | 7429c1f6b2daa5566da44379d8a58dcccd5c26cc /jinja2 | |
parent | 400f973c8d0b86f354d7f68ef70e05cd1b6a91c2 (diff) | |
parent | 33aee12a29426987805420a410e13e0470a79cbf (diff) | |
download | jinja2-5cf31686c3709bd7f10e750752df92873bdde941.tar.gz |
Merge remote-tracking branch 'paradoxxxzero/include_fix'
Diffstat (limited to 'jinja2')
-rw-r--r-- | jinja2/compiler.py | 11 | ||||
-rw-r--r-- | jinja2/testsuite/imports.py | 16 |
2 files changed, 25 insertions, 2 deletions
diff --git a/jinja2/compiler.py b/jinja2/compiler.py index 10c3fef..894317b 100644 --- a/jinja2/compiler.py +++ b/jinja2/compiler.py @@ -949,9 +949,16 @@ class CodeGenerator(NodeVisitor): self.indent() if node.with_context: + self.writeline('include_context = template.new_context(' + 'context.parent, True, locals())') + self.writeline('for name, context_blocks in context.' + 'blocks.%s():' % dict_item_iter) + self.indent() + self.writeline('include_context.blocks.setdefault(' + 'name, [])[0:0] = context_blocks') + self.outdent() self.writeline('for event in template.root_render_func(' - 'template.new_context(context.parent, True, ' - 'locals())):') + 'include_context):') else: self.writeline('for event in template.module._body_stream:') diff --git a/jinja2/testsuite/imports.py b/jinja2/testsuite/imports.py index 3db9008..c3caeac 100644 --- a/jinja2/testsuite/imports.py +++ b/jinja2/testsuite/imports.py @@ -121,6 +121,22 @@ class IncludesTestCase(JinjaTestCase): ))) assert env.get_template("main").render() == "123" + def test_included_block_override(self): + env = Environment(loader=DictLoader(dict( + main="{% extends 'base' %}{% block b %}1337{% endblock %}", + base="{% include 'inc' %}", + inc="{% block b %}42{% endblock %}" + ))) + assert env.get_template("main").render() == "1337" + + def test_included_block_override_with_super(self): + env = Environment(loader=DictLoader(dict( + main="{% extends 'base' %}{% block b %}1337|{{ super() }}{% endblock %}", + base="{% include 'inc' %}", + inc="{% block b %}42{% endblock %}" + ))) + assert env.get_template("main").render() == "1337|42" + def test_unoptimized_scopes(self): t = test_env.from_string(""" {% macro outer(o) %} |