如何从Jinja宏中设置Flask上下文中的变量?

5
我希望创建一个宏,需要跟踪其是否曾经被调用过。因此,在我的宏中,我必须在请求上下文中设置一个变量,但我不知道应该如何实现。类似于以下代码:
{% macro my_macro() -%}
    {% set g.foo = "bar" %}   <-- Error
    {{ g.get('foo') }}
{%- endmacro %}

上述结果会导致一个“jinja2.exceptions.TemplateRuntimeError: cannot assign attribute on non-namespace object”错误。
我知道这可能是对宏概念的滥用,并且也开放其他解决方案。我想跟踪宏的使用情况,以便在大多数情况下只输出一次所需的宏javascript,或者如果未使用宏,则根本不输出。
1个回答

2
有一个解决方法可以使用do而不是set命令:

点击这里

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

请注意,默认情况下,do 命令是 未启用 的,因此为了使其正常工作,您必须像 这里描述的 那样启用 jinja2.ext.do

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接