From: Armin Ronacher Date: Sun, 19 May 2013 12:23:57 +0000 (+0100) Subject: Fixed #79 X-Git-Tag: 2.7~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=400f973c8d0b86f354d7f68ef70e05cd1b6a91c2;p=thirdparty%2Fjinja.git Fixed #79 --- diff --git a/jinja2/compiler.py b/jinja2/compiler.py index 02df8c52..10c3fef0 100644 --- a/jinja2/compiler.py +++ b/jinja2/compiler.py @@ -892,12 +892,13 @@ class CodeGenerator(NodeVisitor): 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) diff --git a/jinja2/testsuite/inheritance.py b/jinja2/testsuite/inheritance.py index 7909b031..a5b94658 100644 --- a/jinja2/testsuite/inheritance.py +++ b/jinja2/testsuite/inheritance.py @@ -12,7 +12,7 @@ import unittest from jinja2.testsuite import JinjaTestCase -from jinja2 import Environment, DictLoader +from jinja2 import Environment, DictLoader, TemplateError LAYOUTTEMPLATE = '''\ @@ -53,13 +53,27 @@ WORKINGTEMPLATE = '''\ {% 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) @@ -219,6 +233,15 @@ class BugFixTestCase(JinjaTestCase): ''' })).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()