Skip to content

Commit

Permalink
Merge branch 'placeholderfix' of https://github.com/pvanderlinden/dja…
Browse files Browse the repository at this point in the history
…ngo-cms into pvanderlinden-placeholderfix
  • Loading branch information
Jonas Obrist committed Oct 14, 2011
2 parents 4700ec9 + 641d7b7 commit 3b1a4c8
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 9 deletions.
4 changes: 4 additions & 0 deletions cms/tests/placeholder.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,10 @@ def test_placeholder_scanning_duplicate(self):
def test_placeholder_scanning_extend_outside_block(self):
placeholders = get_placeholders('placeholder_tests/outside.html')
self.assertEqual(sorted(placeholders), sorted([u'new_one', u'two', u'base_outside']))

def test_placeholder_scanning_extend_outside_block_nested(self)
placeholders = get_placeholders('placeholder_tests/outside_nested.html')
self.assertEqual(sorted(placeholders), sorted([u'new_one', u'two', u'base_outside']))

def test_fieldsets_requests(self):
response = self.client.get(reverse('admin:placeholderapp_example1_add'))
Expand Down
23 changes: 14 additions & 9 deletions cms/utils/plugins.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,17 @@ def _extend_blocks(extend_node, blocks):
block = block.super
block.super = node
# search for further ExtendsNodes
for node in parent.nodelist:
if not isinstance(node, TextNode):
if isinstance(node, ExtendsNode):
_extend_blocks(node, blocks)
break
for node in parent.nodelist.get_nodes_by_type(ExtendsNode):
_extend_blocks(node, blocks)
break

def _find_topmost_template(extend_node):
parent_template = extend_node.get_parent({})
for node in parent_template.nodelist.get_nodes_by_type(ExtendsNode):
# Their can only be one extend block in a template, otherwise django raises an exception
return _find_topmost_template(node)
# No ExtendsNode
return extend_node.get_parent({})

def _extend_nodelist(extend_node):
"""
Expand All @@ -57,10 +63,9 @@ def _extend_nodelist(extend_node):
for block in blocks.values():
placeholders += _scan_placeholders(block.nodelist, block, blocks.keys())

parent_template = extend_node.get_parent({})
# if this is the topmost template, check for placeholders outside of blocks
if not parent_template.nodelist.get_nodes_by_type(ExtendsNode):
placeholders += _scan_placeholders(parent_template.nodelist, None, blocks.keys())
# Scan topmost template for placeholder outside of blocks
parent_template = _find_topmost_template(extend_node)
placeholders += _scan_placeholders(parent_template.nodelist, None, blocks.keys())
return placeholders

def _scan_placeholders(nodelist, current_block=None, ignore_blocks=[]):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{% extends "placeholder_tests/outside.html" %}

0 comments on commit 3b1a4c8

Please sign in to comment.