class ContainerContext(object):
- def __init__(self, page):
- contentlet_specs, contentreference_specs = page.template.containers
-
- contentlets = page.contentlets.filter(name__in=contentlet_specs)
+ def __init__(self, contentlets, references):
self.contentlets = dict(((c.name, c) for c in contentlets))
-
- q = Q()
- for name, ct in contentreference_specs.items():
- q |= Q(name=name, content_type=ct)
- references = page.contentreferences.filter(q)
- self.references = dict(((c.name, c) for c in references))
+ self.references = dict((((c.name, ContentType.objects.get_for_id(c.content_type_id)), c) for c in references))
class ContainerNode(template.Node):
self.references = references
def render(self, context):
- content = settings.TEMPLATE_STRING_IF_INVALID
- if 'page' in context:
- container_content = self.get_container_content(context)
- else:
- container_content = None
+ container_content = self.get_container_content(context)
if self.as_var:
context[self.as_var] = container_content
return ''
- if not container_content:
- return ''
-
return container_content
def get_container_content(self, context):
try:
container_context = context.render_context[CONTAINER_CONTEXT_KEY]
except KeyError:
- container_context = ContainerContext(context['page'])
+ try:
+ page = context['page']
+ except KeyError:
+ return settings.TEMPLATE_STRING_IF_INVALID
+
+ contentlets = page.contentlets.all()
+ references = page.contentreferences.all()
+
+ container_context = ContainerContext(contentlets, references)
context.render_context[CONTAINER_CONTEXT_KEY] = container_context
if self.references:
content = ''
else:
content = contentlet.content
-
- if '{%' in content or '{{' in content:
- try:
- content = template.Template(contentlet.content, name=contentlet.name).render(context)
- except template.TemplateSyntaxError, e:
- if settings.DEBUG:
- content = ('[Error parsing contentlet \'%s\': %s]' % (self.name, e))
- else:
- content = settings.TEMPLATE_STRING_IF_INVALID
- content = mark_safe(content)
return content