From 400f973c8d0b86f354d7f68ef70e05cd1b6a91c2 Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Sun, 19 May 2013 13:23:57 +0100 Subject: Fixed #79 --- jinja2/compiler.py | 3 ++- jinja2/testsuite/inheritance.py | 27 +++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/jinja2/compiler.py b/jinja2/compiler.py index 02df8c5..10c3fef 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 7909b03..a5b9465 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() -- cgit v1.2.1