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

如何在Jinja模板中正确渲染引用的环境变量

问题根因

你的代码无法正确渲染有三个核心问题:

  • 模板语法错误:定义的模板字符串a中,{{environment_variable.person2}}}末尾多了1个多余的},不符合Jinja的占位符语法规则。
  • 传参逻辑错误:Jinja中.代表嵌套属性/键访问,当你写environment_variable.person1时,Jinja会优先查找顶层键为environment_variable的对象,再读取该对象下的person1字段,不会将带.的字符串识别为单个顶层键名。
  • 结果未返回:template.render()不会原地修改模板对象,执行后会返回渲染完成的新字符串,你的代码没有接收、返回这个结果,外部调用拿不到渲染后的内容。

额外注意:不要用dict作为自定义变量名,会覆盖Python内置的字典类型,容易引发异常。

可运行的正确实现

按照你原本的模板写法,只需要修正模板语法、调整传参结构、返回渲染结果即可:

from jinja2 import Template

# 修正模板,删除person2后多余的右花括号
a = "{{environment_variable.person1}} says hello to {{environment_variable.person2}}"

def parse_variable():
    template = Template(a, trim_blocks=True, lstrip_blocks=True)
    # 按嵌套结构传参,匹配Jinja的点号访问规则
    render_params = {
        "environment_variable": {
            "person1": "P",
            "person2": "Q"
        }
    }
    # 返回渲染结果
    return template.render(render_params)

# 调用测试
if __name__ == "__main__":
    result = parse_variable()
    print(result)
    # 输出:P says hello to Q
特殊场景适配

如果你确实需要直接使用带.的字符串作为顶层键名(不推荐,不符合Jinja常规设计),可以修改模板的取值方式为中括号索引写法:

# 模板改为用中括号+引号包裹带点的键名
a = "{{ ['environment_variable.person1'] }} says hello to {{ ['environment_variable.person2'] }}"

def parse_variable():
    template = Template(a, trim_blocks=True, lstrip_blocks=True)
    render_params = {
        'environment_variable.person1':'P',
        'environment_variable.person2':'Q'
    }
    return template.render(render_params)

这种写法可读性和维护性都更差,优先选择嵌套传参的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:42:15