From: Armin Ronacher Date: Sun, 19 May 2013 11:44:50 +0000 (+0100) Subject: Fixed a loop bug. This fixes #100 X-Git-Tag: 2.7~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=15e9eef3808443d492209a739c10ed9c904c1ca5;p=thirdparty%2Fjinja.git Fixed a loop bug. This fixes #100 --- diff --git a/jinja2/compiler.py b/jinja2/compiler.py index 59d770f5..02df8c52 100644 --- a/jinja2/compiler.py +++ b/jinja2/compiler.py @@ -1066,6 +1066,7 @@ class CodeGenerator(NodeVisitor): # make sure the loop variable is a special one and raise a template # assertion error if a loop tries to write to loop if extended_loop: + self.writeline('l_loop = missing') loop_frame.identifiers.add_special('loop') for name in node.find_all(nodes.Name): if name.ctx == 'store' and name.name == 'loop': diff --git a/jinja2/testsuite/regression.py b/jinja2/testsuite/regression.py index 4198259f..a4e66311 100644 --- a/jinja2/testsuite/regression.py +++ b/jinja2/testsuite/regression.py @@ -237,6 +237,16 @@ class BugTestCase(JinjaTestCase): {% endfor %} """) + def test_else_loop_bug(self): + t = Template(''' + {% for x in y %} + {{ loop.index0 }} + {% else %} + {% for i in range(3) %}{{ i }}{% endfor %} + {% endfor %} + ''') + self.assertEqual(t.render(y=[]).strip(), '012') + def test_correct_prefix_loader_name(self): env = Environment(loader=PrefixLoader({ 'foo': DictLoader({})