Python 在模板标记中设置全局模板变量
我知道有上下文处理器可以做到这一点,但我想在模板标记中设置全局模板变量。到目前为止,我试过:Python 在模板标记中设置全局模板变量,python,django,django-templates,Python,Django,Django Templates,我知道有上下文处理器可以做到这一点,但我想在模板标记中设置全局模板变量。到目前为止,我试过: class SetNode(template.Node): def __init__(self, key, nodelist): self.key = key self.nodelist = nodelist def render(self, context): value = self.nodelist.render(context)
class SetNode(template.Node):
def __init__(self, key, nodelist):
self.key = key
self.nodelist = nodelist
def render(self, context):
value = self.nodelist.render(context)
for d in context.dicts:
d[self.key] = value
return ''
即迭代所有上下文并设置变量,但它不起作用。有人能解释一下怎么做吗?例如,base.html:
{{ my_var }} {# I want to set this variable in child template #}
{% block content %}
{% endblock %}
child.html:
{% extends 'base.html' %}
{% block content %}
{% set my_var %}Hello{% endset %}
{% endblock %}
有可能吗?这是一个古老但却很好的东西:标签。代码是不言自明的
请注意,使用它(可能)会将一些业务逻辑移动到模板中,但有时也可以。我没有尝试过它,但正如我看到的,变量将仅在it块中可用。但我希望为所有父块(上下文)设置变量。@Vladimir Mihailenco:然后查看代码并对其进行更改,使其在上下文堆栈中走得更远,并将值保存在那里。不过,我要警告您,这样做可能会让您自己(或后面的人)陷入一个真正邪恶的调试会话,因为您试图弄清楚这一模板变量的值会发生什么变化。我的代码已经做到了(“在上下文堆栈中走得更远,并将值保存在那里”),但它不起作用。据我所知,当我的标记被调用时,Django已经呈现了父/超级模板。我错过什么了吗?