【问题标题】:Set global template variable in template tag在模板标签中设置全局模板变量
【发布时间】:2011-03-27 22:04:19
【问题描述】:

我知道有上下文处理器可以做到这一点,但我想在模板标签中设置全局模板变量。到目前为止,我尝试过这个:

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 %}

有可能吗?

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

    这是一个老歌但很好吃的东西:{% expr %} 标签。代码一目了然。

    请注意,使用它(可能)会将您的一些业务逻辑移动到您的模板中,但有时也可以。

    【讨论】:

    • 我没有尝试过,但我看到变量只能在它的块内使用。但我想为所有父块(上下文)设置变量。
    • @Vladimir Mihailenco:然后查看代码并对其进行更改,使其在上下文堆栈中走得更远,并将值保存在那里。不过,我会警告你,这样做你可能会为自己(或追随你的人)设置一个真正邪恶的调试会话,因为你试图弄清楚这个模板发生了什么变量的值。
    • 我的代码已经做到了(“在上下文堆栈中走得更远并在那里保存值”),但它不起作用。据我了解,当我的标签被调用时,Django 已经呈现父/超级模板。我错过了什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2019-12-05
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多