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

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -