python-3.x 如何执行一个自定义过滤器,如果没有赋值给变量,就不返回任何输出?

xuo3flqw  于 2023-04-22  发布在  Python
关注(0)|答案(1)|浏览(125)

我有一个自定义的过滤器,它更新代码中的一个全局变量,并在调用时做一些其他的事情。
我只想在模板中调用它,而不将输出赋给变量。
这样做是可行的,但我想删除不必要的变量赋值:

{%- set unused = {'one': 'aaa', "two": "bbb", 'three': 'ccc'} | get_env_var -%}

我尝试了以下方法:

{%- {'one': 'aaa', "two": "bbb", 'three': 'ccc'} | get_env_var -%}
jinja2.exceptions.TemplateSyntaxError: tag name expected
{{'one': 'aaa', "two": "bbb", 'three': 'ccc'} | get_env_var}
jinja2.exceptions.TemplateSyntaxError: expected token 'end of print statement', got ':'
{{{'one': 'aaa', "two": "bbb", 'three': 'ccc'} | get_env_var}}
yaml.composer.ComposerError: expected a single document in the stream
in "<unicode string>", line 3, column 1:
    ccc
    ^
but found another document
  in "<unicode string>", line 4, column 1:
    ---
    ^

如何只执行自定义过滤器而不捕获其输出?

ckx4rj1h

ckx4rj1h1#

假设您的环境已经启用了 expression statement 扩展,那么expression语句-{% do ... %}-最适合您的用例。
正如文档中所指出的,它的行为类似于变量表达式{{ ... }},但不会打印任何内容。
在您的情况下,用法如下:

{%- do {
    'one': 'aaa', 
    'two': 'bbb', 
    'three': 'ccc'
} | get_env_var -%}

相关问题