from django import template
register = template.Library()
class RenderPartialNode(template.Node):
def __init__(self, object_name, template_name=None):
self.object_name = object_name
self.template_name = template_name
def render(self, context):
if not self.template_name:
self.template_name = 'partials/' + context[self.object_name].__class__.__name__.lower() + '.html'
t = template.loader.get_template(self.template_name)
return t.render(context)
def do_render_partial(parser, token):
bits = token.split_contents()
if len(bits) == 2:
return RenderPartialNode(bits[1])
elif len(bits) == 3:
return RenderPartialNode(bits[1], bits[2])
else:
raise template.TemplateSyntaxError, "%r requires one or two arguments" % bits[0]
register.tag('render_partial', do_render_partial)
Comments