X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/8133055bd691f31bf5b70c580ea1f5b405cc198e..9378da0590e3fcb8817d0c0309413bf59083ae8b:/models/pages.py diff --git a/models/pages.py b/models/pages.py index 8f6d3dc..2221ee4 100644 --- a/models/pages.py +++ b/models/pages.py @@ -18,20 +18,24 @@ from philo.signals import page_about_to_render_to_string, page_finished_renderin class LazyContainerFinder(object): - _created = 0 - _initialized = 0 - - def __init__(self, nodes): - self.__class__._created += 1 + def __init__(self, nodes, extends=False): self.nodes = nodes self.initialized = False self.contentlet_specs = set() self.contentreference_specs = SortedDict() self.blocks = {} self.block_super = False + self.extends = extends def process(self, nodelist): for node in nodelist: + if self.extends: + if isinstance(node, BlockNode): + self.blocks[node.name] = block = LazyContainerFinder(node.nodelist) + block.initialize() + self.blocks.update(block.blocks) + continue + if isinstance(node, ContainerNode): if not node.references: self.contentlet_specs.add(node.name) @@ -40,17 +44,6 @@ class LazyContainerFinder(object): self.contentreference_specs[node.name] = node.references continue - if isinstance(node, BlockNode): - #if nodelist == self.nodes: Necessary? - self.blocks[node.name] = block = LazyContainerFinder(node.nodelist) - if block.nodes.get_nodes_by_type(BlockNode): # Is this faster? - block.initialize() - self.blocks.update(block.blocks) - continue - - if isinstance(node, ExtendsNode): - continue - if isinstance(node, VariableNode): if node.filter_expression.var.lookups == (u'block', u'super'): self.block_super = True @@ -74,7 +67,6 @@ class LazyContainerFinder(object): if not self.initialized: self.process(self.nodes) self.initialized = True - self.__class__._initialized += 1 class Template(TreeModel): @@ -104,7 +96,7 @@ class Template(TreeModel): if extends: if extends.nodelist: - nodelists.append(LazyContainerFinder(extends.nodelist)) + nodelists.append(LazyContainerFinder(extends.nodelist, extends=True)) loaded_template = getattr(extends, LOADED_TEMPLATE_ATTR) nodelists.extend(build_extension_tree(loaded_template.nodelist)) else: @@ -138,7 +130,7 @@ class Template(TreeModel): return contentlet_specs, contentreference_specs def __unicode__(self): - return self.get_path(pathsep=u' › ', field='name') + return self.name class Meta: app_label = 'philo' @@ -179,6 +171,9 @@ class Page(View): return self.title def clean_fields(self, exclude=None): + if exclude is None: + exclude = [] + try: super(Page, self).clean_fields(exclude) except ValidationError, e: