如何从 jinja 宏在烧瓶上下文中设置变量?

tob*_*obs 5 jinja2 flask

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

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

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

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

Dan*_*ein 2

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

{% do g.update({"foo": "bar"}) %}
Run Code Online (Sandbox Code Playgroud)

请注意,该do命令默认情况下未启用,因此要使其工作,您必须jinja2.ext.do按照此处所述启用。