【问题标题】:How to set a variable in the flask context from a jinja macro?如何从 jinja 宏在烧瓶上下文中设置变量?
【发布时间】:2018-04-20 16:10:06
【问题描述】:

我想创建一个宏,它需要跟踪它是否曾经被调用过。因此,我必须在宏的请求上下文中设置一个变量,但我不知道如何做到这一点。比如:

{% macro my_macro() -%}
    {% set g.foo = "bar" %}   <-- Error
    {{ g.get('foo') }}
{%- endmacro %}

以上导致jinja2.exceptions.TemplateRuntimeError: cannot assign attribute on non-namespace object 错误。

我知道这可能是对宏观概念的滥用,并且也可以接受其他解决方案。我想跟踪宏的使用,所以我最多可以一次为宏输出一些所需的 javascript,或者如果没有使用宏,则根本不输出。

【问题讨论】:

    标签: flask jinja2


    【解决方案1】:

    is a workaround 使用do 而不是set 命令:

    {% do g.update({"foo": "bar"}) %}
    

    请注意do 命令默认为not enabled,因此您必须将jinja2.ext.do 启用为described here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 2018-12-12
      • 1970-01-01
      • 2020-02-23
      相关资源
      最近更新 更多