Code

Ticket #5831: forloop.nodelist.patch

File forloop.nodelist.patch, 1.6 KB (added by Charmless <jim-django@…>, 7 years ago)

patch against SVN revision 6626

  • defaulttags.py

     
    9595        return nodes 
    9696 
    9797    def render(self, context): 
    98         nodelist = NodeList() 
     98        results = [] 
     99 
    99100        if 'forloop' in context: 
    100101            parentloop = context['forloop'] 
    101102        else: 
    102103            parentloop = {} 
     104 
    103105        context.push() 
     106 
    104107        try: 
    105108            values = self.sequence.resolve(context, True) 
    106109        except VariableDoesNotExist: 
     
    112115        len_values = len(values) 
    113116        if self.reversed: 
    114117            values = reversed(values) 
     118 
    115119        unpack = len(self.loopvars) > 1 
     120 
    116121        for i, item in enumerate(values): 
    117122            context['forloop'] = { 
    118123                # shortcuts for current loop iteration number 
     
    131136                context.update(dict(zip(self.loopvars, item))) 
    132137            else: 
    133138                context[self.loopvars[0]] = item 
    134             for node in self.nodelist_loop: 
    135                 nodelist.append(node.render(context)) 
     139 
     140            results.append(self.nodelist_loop.render(context)) 
     141 
    136142            if unpack: 
    137143                # The loop variables were pushed on to the context so pop them 
    138144                # off again. This is necessary because the tag lets the length 
     
    141147                # context. 
    142148                context.pop() 
    143149        context.pop() 
    144         return nodelist.render(context) 
    145150 
     151        return ''.join(results) 
     152 
    146153class IfChangedNode(Node): 
    147154    def __init__(self, nodelist, *varlist): 
    148155        self.nodelist = nodelist