You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jinja2中执行无返回自定义过滤器且不赋值变量?

在Jinja2中调用无返回值自定义过滤器(无需变量赋值)

正确写法

使用Jinja2的do标签可以直接执行表达式而不输出结果,也不需要赋值给变量:

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

为什么之前的写法报错?

  • 第一种写法{%- {'one': ...} | get_env_var -%}:{% ... %}是标签语法块,内部必须是合法的标签名称(如set、if),不能直接写表达式,因此触发tag name expected错误。
  • 第二种写法{{'one': ...} | get_env_var}:字典定义缺少外层大括号,正确的字典写法是{{{'key': 'val'}}};但即使修正,{{ ... }}是用来输出表达式结果的,你的过滤器无返回值会输出None,若在YAML环境(如Ansible)中,输出内容会被解析为YAML文档,导致后续内容冲突,也就是第三种写法触发的yaml.composer.ComposerError错误。

注意事项

do标签需要Jinja2启用jinja2.ext.do扩展:

  • 如果是手动创建Jinja2环境,需在配置中添加:
    from jinja2 import Environment, DictLoader
    env = Environment(extensions=['jinja2.ext.do'], loader=DictLoader({}))
    
  • 若是在Ansible等基于Jinja2的工具中,该扩展默认已启用,无需额外配置。

内容的提问来源于stack exchange,提问作者red888

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 00:32:01