我尝试使用simple_tag并设置一个上下文变量。我使用的是django的 Backbone.js 版本:
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 ''
这并没有设置变量,但是如果我对@register.tag
做一些非常类似的事情,它可以工作,但是object参数不会通过...
谢谢!
3条答案
按热度按时间xggvc2p61#
你在这里混合了两种方法。
simple_tag
只是一个帮助函数,它减少了一些样板代码,应该返回一个字符串。要设置上下文变量,你需要(至少在普通的django中)用render方法编写自己的标签。这可以被称为这样:
6jygbczu2#
从Django 1.9开始,可以通过使用
as
参数后跟变量名来将simple_tag
结果存储在模板变量中:xeufq47z3#
您可以使用@register.simple_tag存储一个上下文变量,它返回简单的数据,而不是返回一个复杂的基于
Node
类的对象,如下所示:输出:
此外,您可以使用
as
参数将@register.simple_tag
的person()
的返回值存储到person_info
,如下所示:输出:
并且,您可以使用@register.tag存储上下文变量,它返回一个复杂的基于
Node
(类)的对象,如下所示。*@register.tag
不能接受takes_context
参数,否则会出现错误,并且无法使用as
参数:输出: