Django

Code

Ticket #6322: ifchanged.diff

File ifchanged.diff, 2.3 kB (added by nedbatchelder, 1 year ago)

the patch!

  • django/template/defaulttags.py

    old new  
    162162        self.nodelist = nodelist 
    163163        self._last_seen = None 
    164164        self._varlist = map(Variable, varlist) 
    165  
     165        self._id = str(id(self)) 
     166         
    166167    def render(self, context): 
    167         if 'forloop' in context and context['forloop']['first']: 
     168        if 'forloop' in context and self._id not in context['forloop']: 
    168169            self._last_seen = None 
     170            context['forloop'][self._id] = self 
    169171        try: 
    170172            if self._varlist: 
    171173                # Consider multiple parameters.  This automatically behaves 
  • tests/regressiontests/templates/tests.py

    old new  
    544544            'ifchanged06': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', { 'num': (1, 1, 1), 'numx': (2, 2, 2)}, '1222'), 
    545545            'ifchanged07': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% for y in numy %}{% ifchanged %}{{ y }}{% endifchanged %}{% endfor %}{% endfor %}{% endfor %}', { 'num': (1, 1, 1), 'numx': (2, 2, 2), 'numy': (3, 3, 3)}, '1233323332333'), 
    546546 
     547            'ifchanged08': ( 
     548                '{% for data in datalist %}' 
     549                    '{% for c,d in data %}' 
     550                        '{% if c %}{% ifchanged %}{{ d }}{% endifchanged %}{% endif %}' 
     551                    '{% endfor %}' 
     552                '{% endfor %}', 
     553                { 'datalist': [[(1,'a'),(1,'a'),(0,'b'),(1,'c')],[(0,'a'),(1,'c'),(1,'d'),(1,'d'),(0,'e')]] }, 'accd'), 
     554 
    547555            # Test one parameter given to ifchanged. 
    548556            'ifchanged-param01': ('{% for n in num %}{% ifchanged n %}..{% endifchanged %}{{ n }}{% endfor %}', { 'num': (1,2,3) }, '..1..2..3'), 
    549557            'ifchanged-param02': ('{% for n in num %}{% for x in numx %}{% ifchanged n %}..{% endifchanged %}{{ x }}{% endfor %}{% endfor %}', { 'num': (1,2,3), 'numx': (5,6,7) }, '..567..567..567'),