summaryrefslogtreecommitdiff
path: root/jinja2
diff options
context:
space:
mode:
authorArmin Ronacher <armin.ronacher@active-4.com>2013-05-19 13:25:43 +0100
committerArmin Ronacher <armin.ronacher@active-4.com>2013-05-19 13:25:43 +0100
commit5cf31686c3709bd7f10e750752df92873bdde941 (patch)
tree7429c1f6b2daa5566da44379d8a58dcccd5c26cc /jinja2
parent400f973c8d0b86f354d7f68ef70e05cd1b6a91c2 (diff)
parent33aee12a29426987805420a410e13e0470a79cbf (diff)
downloadjinja2-5cf31686c3709bd7f10e750752df92873bdde941.tar.gz
Merge remote-tracking branch 'paradoxxxzero/include_fix'
Diffstat (limited to 'jinja2')
-rw-r--r--jinja2/compiler.py11
-rw-r--r--jinja2/testsuite/imports.py16
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) %}