Skip to content

Problem using loop.index when iterating over itertools.groupby result #555

@binrush

Description

@binrush

Hello. I have strange jinja2 behavior when iterating over result produced by itertoos.groupby function. When I don't use loop.index, everything is OK:

import operator
import itertools
from jinja2 import Template

l = [(1, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]
i = itertools.groupby(l, lambda e: operator.getitem(e, 0))
template = """
  {% for g in i %}
    {% for e in g[1] %}
      {{ e }}
  {% endfor %}
{% endfor %}
"""
tpl = Template(template)
print tpl.render(i=i)

Output is: (1, 'a') (1, 'b') (2, 'c') (3, 'd'), so loop iterates over all elements.

When I call loop.index in loop, I have only last element in output:

import operator
import itertools
from jinja2 import Template

l = [(1, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]
i = itertools.groupby(l, lambda e: operator.getitem(e, 0))
template = """
  {% for g in i %}
    {% for e in g[1] %}
      {{ e }} {{loop.index}}
  {% endfor %}
{% endfor %}
"""
tpl = Template(template)
print tpl.render(i=i)

Output is (3, 'd') 1

Is it a bug or feature?

P.S. I'm using Jinja2 2.8 and python 2.7

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions