我想创建一个宏,如果以前调用过它,则需要对其进行跟踪。因此,我将不得不在宏的请求上下文中设置一个变量,但是我不知道该怎么做。就像是:

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

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

我知道这可能是对宏概念的滥用,也将对其他解决方案开放。我想跟踪宏的使用,因此我最多可以一次输出该宏的一些必需的javascript,如果不使用该宏,则可以完全不输出。

最佳答案

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

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

请注意,do命令默认情况下为not enabled,因此要使此功能起作用,必须将jinja2.ext.do启用为described here

10-06 08:31