templates - Django simple_tag and setting context variables -
im trying use simple_tag , set context variable. using trunk version of django
from django import template @register.simple_tag(takes_context=true) def somefunction(context, obj): return set_context_vars(obj) class set_context_vars(template.node): def __init__(self, obj): self.object = obj def render(self, context): context['var'] = 'somevar' return ''
this doesnt set variable, if similar @register.tag
works object parameter doesn't pass through...
thanks!
you mixing 2 approaches here. simple_tag
merely helper function, cuts down on boilerplate code , supposed return string. set context variables, need (at least plain django) write own tag render method.
from django import template register = template.library() class foonode(template.node): def __init__(self, obj): # saves passed obj parameter later use # template.variable, because way can resolved # against current context in render method self.object = template.variable(obj) def render(self, context): # resolve allows obj variable name, otherwise # string obj = self.object.resolve(context) # obj object passed tag context['var'] = 'somevar' return '' @register.tag def do_foo(parser, token): # token string extracted template, e.g. "do_foo my_object" # splitted, , second argument passed new # constructed foonode try: tag_name, obj = token.split_contents() except valueerror: raise template.templatesyntaxerror, "%r tag requires 1 argument" % token.contents.split()[0] return foonode(obj)
this may called this:
{% do_foo my_object %} {% do_foo 25 %}
Comments
Post a Comment