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