1 from django import template
2 from django.conf import settings
3 from django.utils.safestring import SafeUnicode, mark_safe
4 from django.core.exceptions import ObjectDoesNotExist
6 register = template.Library()
9 class ContainerNode(template.Node):
10 def __init__(self, name, as_var=None):
13 def render(self, context):
16 page = context['page']
20 contentlet = page.contentlets.get(name__exact=self.name)
21 except ObjectDoesNotExist:
24 content = contentlet.content
25 if contentlet.dynamic:
27 content = mark_safe(template.Template(content, name=contentlet.name).render(context))
28 except template.TemplateSyntaxError, error:
31 content = ('[Error parsing contentlet \'%s\': %s]' % self.name, error)
33 context[self.as_var] = content
39 def do_container(parser, token):
41 {% container <name> [as <variable>] %}
43 params = token.split_contents()
44 if len(params) >= 2: # without as_var
45 name = params[1].strip('"')
49 return ContainerNode(name, as_var)
51 raise template.TemplateSyntaxError('do_container template tag provided with invalid arguments')
52 register.tag('container', do_container)