Opened 16 years ago

Last modified 16 years ago

#6322 closed

ifchanged doesn't properly reset itself if not evaluated each time through the loop — at Version 2

Reported by: Ned Batchelder Owned by: nobody
Component: Template system Version: dev
Severity: Keywords:
Cc: Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Adrian Holovaty)

When using ifchanged in a doubly-nested loop, the value is only reset to None on the inner loop's first iteration. But if the ifchanged tag is inside another conditional, it may not be evaluated on the first iteration. This can mean the value isn't properly reset:

    {% for data in datalist %}
        {% for c,d in data %}
            {% if c %}
                {% ifchanged %}{{ d }}{% endifchanged %}
            {% endif %}
        {% endfor %}
    {% endfor %}

The fix is to not examine forloop.first explicitly, but to annotate the forloop context.

Change History (3)

by Ned Batchelder, 16 years ago

Attachment: ifchanged.diff added

the patch!

comment:1 by Jacob, 16 years ago

Triage Stage: UnreviewedReady for checkin

comment:2 by Adrian Holovaty, 16 years ago

Description: modified (diff)

Fixed formatting in description.

Note: See TracTickets for help on using tickets.
Back to Top