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

如何在Jinja2模板中像Python一样解包字典作为函数参数?

在Jinja2中实现字典解包传参到函数

Jinja2原生不支持Python里的**字典解包语法,这就是你触发报错的原因——模板解析时会把**mydict当成字符串的幂运算操作,而非参数解包,所以才会出现str和dict无法用**的错误。

要实现类似功能,有两种实用方案:

方案一:自定义全局函数处理参数合并

在Python后端代码里,给Jinja2环境添加一个全局函数,负责合并固定参数和解包字典,再调用目标函数:

from jinja2 import Environment

def call_with_merged_args(func, **kwargs):
    # 从kwargs中提取要解包的字典,约定用unpack_dict作为键
    unpack_dict = kwargs.pop('unpack_dict', {})
    # 合并固定参数和解包字典
    combined_args = {**kwargs, **unpack_dict}
    return func(**combined_args)

# 把函数注册到Jinja2环境
env = Environment()
env.globals['call_with_merged_args'] = call_with_merged_args

然后在模板里这样调用:

{% set mydict = {'hello': 'world'} %}
{{ call_with_merged_args(myfunction, one=1, unpack_dict=mydict) }}

方案二:预先在后端处理参数

如果场景比较简单,也可以在Python后端提前合并好参数,再把合并后的字典传给模板,直接调用函数时展开:

# 后端代码
mydict = {'hello': 'world'}
combined_args = {'one': 1, **mydict}
# 把参数和函数传给模板
template_vars = {
    'myfunction': myfunction,
    'combined_args': combined_args
}

模板里直接调用:

{{ myfunction(**combined_args) }}

这种方式更直接,但灵活性不如方案一,适合参数结构固定的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:03:19