self.indent()
self.writeline('raise TemplateRuntimeError(%r)' %
'extended multiple times')
- self.outdent()
# if we have a known extends already we don't need that code here
# as we know that the template execution will end here.
if self.has_known_extends:
raise CompilerExit()
+ else:
+ self.outdent()
self.writeline('parent_template = environment.get_template(', node)
self.visit(node.template, frame)
from jinja2.testsuite import JinjaTestCase
-from jinja2 import Environment, DictLoader
+from jinja2 import Environment, DictLoader, TemplateError
LAYOUTTEMPLATE = '''\
{% endblock %}
'''
+DOUBLEEXTENDS = '''\
+{% extends "layout" %}
+{% extends "layout" %}
+{% block block1 %}
+ {% if false %}
+ {% block block2 %}
+ this should workd
+ {% endblock %}
+ {% endif %}
+{% endblock %}
+'''
+
+
env = Environment(loader=DictLoader({
'layout': LAYOUTTEMPLATE,
'level1': LEVEL1TEMPLATE,
'level2': LEVEL2TEMPLATE,
'level3': LEVEL3TEMPLATE,
'level4': LEVEL4TEMPLATE,
- 'working': WORKINGTEMPLATE
+ 'working': WORKINGTEMPLATE,
+ 'doublee': DOUBLEEXTENDS,
}), trim_blocks=True)
'''
})).get_template("test.html").render().split() == [u'outer_box', u'my_macro']
+ def test_double_extends(self):
+ """Ensures that a template with more than 1 {% extends ... %} usage
+ raises a ``TemplateError``.
+ """
+ try:
+ tmpl = env.get_template('doublee')
+ except Exception, e:
+ assert isinstance(e, TemplateError)
+
def suite():
suite = unittest.TestSuite()