Ticket #4523: NodeList-cleanup.patch

File NodeList-cleanup.patch, 2.7 KB (added by (removed), 8 years ago)

NodeList/ForNode cleanup; ForNode uses a list directly, remove render_node from NodeList/DebugNodeList, instead moving the override into DebugNodeList and simplifying NodeList.render

  • django/template/__init__.py

    === modified file 'django/template/__init__.py'
     
    717717
    718718class NodeList(list):
    719719    def render(self, context):
    720         bits = []
    721         for node in self:
    722             if isinstance(node, Node):
    723                 bits.append(self.render_node(node, context))
    724             else:
    725                 bits.append(node)
    726         return ''.join(bits)
     720        return ''.join([node.render(context) for node in self])
    727721
    728722    def get_nodes_by_type(self, nodetype):
    729723        "Return a list of all nodes of the given type"
     
    732726            nodes.extend(node.get_nodes_by_type(nodetype))
    733727        return nodes
    734728
    735     def render_node(self, node, context):
    736         return(node.render(context))
    737 
    738729class DebugNodeList(NodeList):
    739     def render_node(self, node, context):
    740         try:
    741             result = node.render(context)
    742         except TemplateSyntaxError, e:
    743             if not hasattr(e, 'source'):
    744                 e.source = node.source
    745             raise
    746         except Exception, e:
    747             from sys import exc_info
    748             wrapped = TemplateSyntaxError('Caught an exception while rendering: %s' % e)
    749             wrapped.source = node.source
    750             wrapped.exc_info = exc_info()
    751             raise wrapped
    752         return result
     730    def render(self, context):
     731        bits = []
     732        for node in self:
     733            try:
     734                bits.append(node.render(context))
     735            except TemplateSyntaxError, e:
     736                if not hasattr(e, 'source'):
     737                    e.source = node.source
     738                raise
     739            except Exception, e:
     740                from sys import exc_info
     741                wrapped = TemplateSyntaxError('Caught an exception while rendering: %s' % e)
     742                wrapped.source = node.source
     743                wrapped.exc_info = exc_info()
     744                raise wrapped
     745        return ''.join(bits)
    753746
    754747class TextNode(Node):
    755748    def __init__(self, s):
  • django/template/defaulttags.py

    === modified file 'django/template/defaulttags.py'
     
    9595        return nodes
    9696
    9797    def render(self, context):
    98         nodelist = NodeList()
     98        nodelist = []
    9999        if 'forloop' in context:
    100100            parentloop = context['forloop']
    101101        else:
     
    141141                # context.
    142142                context.pop()
    143143        context.pop()
    144         return nodelist.render(context)
     144        return ''.join(nodelist)
    145145
    146146class IfChangedNode(Node):
    147147    def __init__(self, nodelist, *varlist):
Back to Top