我想创建一个宏,它需要跟踪以前是否被调用过。因此,我必须在宏的请求上下文中设置一个变量,但我不知道如何做到这一点。就像是:
{% 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 .
关于flask - 如何从 jinja 宏在 flask 上下文中设置变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49945768/