不能将全局变量用作宏中的默认参数

时间:2018-10-23 18:09:14

标签: jinja2

我在处理程序中添加了一些全局变量,这些全局变量应可用于所有模板,包括宏。

jinja_env.globals.update({
  "SOME_CONSTANT": SOME_CONSTANT_1,
})

当我在这样的宏中使用它时,它工作正常:

{% macro is_some_constant(some_str) -%}
  some_str == SOME_CONSTANT
{%- endmacro %}

但是当我尝试使用全局变量作为宏的默认arg时,我得到了一个未定义的错误:

{% macro test_something(something=SOME_CONSTANT) -%}
  ...
{%- endmacro %}

结果:NameError: global name 'l_SOME_CONSTANT' is not defined

这是预期的吗?我发现了这个related issue已修复的this PR,但仍然遇到了这个问题。第一个链接中提到的解决方法确实有效,但是有点愚蠢和烦人:

{% set SOME_CONSTANT = SOME_CONSTANT %}
{% macro test_something(something=SOME_CONSTANT) -%}
  ...
{%- endmacro %}

1 个答案:

答案 0 :(得分:0)

哦,我意识到我使用的是jinja2 v2.8,fix PR已合并到2.9(我认为)。所以也许可以解决问题。

现在,我将只使用hacky解决方法。