blob: a3b3b2a0d3e696b7b5256e2c9da877f5b3a2c7d9 [file] [log] [blame]
from django import template
from django.conf import settings
import pystache
import os
register = template.Library()
class View(pystache.View):
template_path = settings.TEMPLATE_DIRS[0]
def __init__(self, template_dir, template_name, context):
self.template_path = template_dir
self.template_name = template_name
return super(View, self).__init__(context=context)
class MustacheNode(template.Node):
def __init__(self, template_name, attr=None):
for template_dir in settings.TEMPLATE_DIRS:
if os.path.exists(os.path.join(template_dir, template_name) + ".mustache"):
break
else:
raise IOError("failed to find %s in %s" % (template_name, str(settings.TEMPLATE_DIRS)))
self.template_path = template_dir
self.template = template_name
self.attr = attr
def render(self, context):
mcontext = context[self.attr] if self.attr else {}
view = View(self.template_path, self.template, context=mcontext)
return view.render()
def do_mustache(parser, token):
"""
Loads a mustache template and render it inline
Example::
{% mustache "foo/bar" data %}
"""
bits = token.split_contents()
if len(bits) not in [2,3]:
raise template.TemplateSyntaxError("%r tag takes two arguments: the location of the template file, and the template context" % bits[0])
path = bits[1]
path = path[1:-1]
attrs = bits[2:]
return MustacheNode(path, *attrs)
register.tag("mustache", do_mustache)