from django import template
from django.utils import simplejson
import re
register = template.Library()
class VariablesNode(template.Node):
def __init__(self, nodelist, var_name):
self.nodelist = nodelist
self.var_name = var_name
def render(self, context):
source = self.nodelist.render(context)
context[self.var_name] = simplejson.loads(source)
return ''
@register.tag(name='var')
def do_variables(parser, token):
try:
tag_name, arg = token.contents.split(None, 1)
except ValueError:
msg = '"%s" tag requires arguments' % token.contents.split()[0]
raise template.TemplateSyntaxError(msg)
m = re.search(r'as (\w+)', arg)
if m:
var_name, = m.groups()
else:
msg = '"%s" tag had invalid arguments' % tag_name
raise template.TemplateSyntaxError(msg)
nodelist = parser.parse(('endvar',))
parser.delete_first_token()
return VariablesNode(nodelist, var_name)
Comments