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)