added loop filtering
--HG--
branch : trunk
diff --git a/jinja2/parser.py b/jinja2/parser.py
index 2d04211..5185df3 100644
--- a/jinja2/parser.py
+++ b/jinja2/parser.py
@@ -110,18 +110,17 @@
self.filename)
target.set_ctx('store')
self.stream.expect('in')
- iter = self.parse_tuple()
- if self.stream.current.type is 'recursive':
+ iter = self.parse_tuple(no_condexpr=True)
+ test = None
+ if self.stream.current.type is 'if':
self.stream.next()
- recursive = True
- else:
- recursive = False
+ test = self.parse_expression()
body = self.parse_statements(('endfor', 'else'))
if self.stream.next().type is 'endfor':
else_ = []
else:
else_ = self.parse_statements(('endfor',), drop_needle=True)
- return nodes.For(target, iter, body, else_, False, lineno=lineno)
+ return nodes.For(target, iter, body, else_, test, lineno=lineno)
def parse_if(self):
"""Parse an if construct."""
@@ -236,8 +235,10 @@
self.end_statement()
return node
- def parse_expression(self):
+ def parse_expression(self, no_condexpr=False):
"""Parse an expression."""
+ if no_condexpr:
+ return self.parse_or()
return self.parse_condexpr()
def parse_condexpr(self):
@@ -417,14 +418,19 @@
node = self.parse_postfix(node)
return node
- def parse_tuple(self, enforce=False, simplified=False):
+ def parse_tuple(self, enforce=False, simplified=False, no_condexpr=False):
"""
Parse multiple expressions into a tuple. This can also return
just one expression which is not a tuple. If you want to enforce
a tuple, pass it enforce=True (currently unused).
"""
lineno = self.stream.current.lineno
- parse = simplified and self.parse_primary or self.parse_expression
+ if simplified:
+ parse = self.parse_primary
+ elif no_condexpr:
+ parse = lambda: self.parse_expression(no_condexpr=True)
+ else:
+ parse = self.parse_expression
args = []
is_tuple = False
while 1: