Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在模板标记中设置全局模板变量_Python_Django_Django Templates - Fatal编程技术网

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已经呈现了父/超级模板。我错过什么了吗?