mirror of
https://github.com/django/django.git
synced 2025-07-06 10:49:17 +00:00
queryset-refactor: Two files were missed during the latest merge from trunk.
git-svn-id: http://code.djangoproject.com/svn/django/branches/queryset-refactor@7123 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
748e1bdf42
commit
770d587314
@ -289,9 +289,14 @@ class Parser(object):
|
|||||||
return NodeList()
|
return NodeList()
|
||||||
|
|
||||||
def extend_nodelist(self, nodelist, node, token):
|
def extend_nodelist(self, nodelist, node, token):
|
||||||
if (node.must_be_first and nodelist and
|
if node.must_be_first and nodelist:
|
||||||
(not isinstance(nodelist[0], TextNode) or len(nodelist) > 2)):
|
try:
|
||||||
|
if nodelist.contains_nontext:
|
||||||
|
raise AttributeError
|
||||||
|
except AttributeError:
|
||||||
raise TemplateSyntaxError("%r must be the first tag in the template." % node)
|
raise TemplateSyntaxError("%r must be the first tag in the template." % node)
|
||||||
|
if isinstance(nodelist, NodeList) and not isinstance(node, TextNode):
|
||||||
|
nodelist.contains_nontext = True
|
||||||
nodelist.append(node)
|
nodelist.append(node)
|
||||||
|
|
||||||
def enter_command(self, command, token):
|
def enter_command(self, command, token):
|
||||||
@ -732,6 +737,10 @@ class Node(object):
|
|||||||
return nodes
|
return nodes
|
||||||
|
|
||||||
class NodeList(list):
|
class NodeList(list):
|
||||||
|
# Set to True the first time a non-TextNode is inserted by
|
||||||
|
# extend_nodelist().
|
||||||
|
contains_nontext = False
|
||||||
|
|
||||||
def render(self, context):
|
def render(self, context):
|
||||||
bits = []
|
bits = []
|
||||||
for node in self:
|
for node in self:
|
||||||
|
@ -69,14 +69,10 @@ class ExtendsNode(Node):
|
|||||||
|
|
||||||
def render(self, context):
|
def render(self, context):
|
||||||
compiled_parent = self.get_parent(context)
|
compiled_parent = self.get_parent(context)
|
||||||
if len(compiled_parent.nodelist) > 1:
|
pos = 0
|
||||||
n0, n1 = compiled_parent.nodelist[:2]
|
while isinstance(compiled_parent.nodelist[pos], TextNode):
|
||||||
else:
|
pos += 1
|
||||||
n0, n1 = compiled_parent.nodelist[0], None
|
parent_is_child = isinstance(compiled_parent.nodelist[pos], ExtendsNode)
|
||||||
parent_is_child = (isinstance(n0, ExtendsNode) or
|
|
||||||
(isinstance(n0, TextNode) and isinstance(n1, ExtendsNode)))
|
|
||||||
if parent_is_child:
|
|
||||||
extend_node = int(not isinstance(n0, ExtendsNode))
|
|
||||||
parent_blocks = dict([(n.name, n) for n in compiled_parent.nodelist.get_nodes_by_type(BlockNode)])
|
parent_blocks = dict([(n.name, n) for n in compiled_parent.nodelist.get_nodes_by_type(BlockNode)])
|
||||||
for block_node in self.nodelist.get_nodes_by_type(BlockNode):
|
for block_node in self.nodelist.get_nodes_by_type(BlockNode):
|
||||||
# Check for a BlockNode with this node's name, and replace it if found.
|
# Check for a BlockNode with this node's name, and replace it if found.
|
||||||
@ -88,7 +84,7 @@ class ExtendsNode(Node):
|
|||||||
# add this BlockNode to the parent's ExtendsNode nodelist, so
|
# add this BlockNode to the parent's ExtendsNode nodelist, so
|
||||||
# it'll be checked when the parent node's render() is called.
|
# it'll be checked when the parent node's render() is called.
|
||||||
if parent_is_child:
|
if parent_is_child:
|
||||||
compiled_parent.nodelist[extend_node].nodelist.append(block_node)
|
compiled_parent.nodelist[pos].nodelist.append(block_node)
|
||||||
else:
|
else:
|
||||||
# Keep any existing parents and add a new one. Used by BlockNode.
|
# Keep any existing parents and add a new one. Used by BlockNode.
|
||||||
parent_block.parent = block_node.parent
|
parent_block.parent = block_node.parent
|
||||||
|
Loading…
x
Reference in New Issue
Block a user