Ticket #5831: forloop.nodelist.patch

File forloop.nodelist.patch, 1.6 KB (added by Charmless <jim-django@…>, 8 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
Back to Top