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

Jinja2模板用列表推导式报expected token ','错误但Python正常如何解决

Jinja2语法报错解决方法

报错原因

Jinja2的表达式语法对原生Python的嵌套生成器支持有限,你代码中dict(item.split("=") for item in item.split(","))里的生成器表达式item.split("=") for item in item.split(",")不符合Jinja2语法规范,因此抛出expected token ',', got 'for'错误。
同时你原有代码中多层循环复用同一个变量名item,也存在变量作用域覆盖的隐患。

可行实现方案

方案1:拆分逻辑(可读性更高)

用Jinja2内置的map过滤器实现键值对拆分,拆分后的逻辑和你原生Python的效果完全一致:

{% set input_str = "studId=ValueA,studName=valueB;studId=ValueC,studName=ValueD" %}
{% for stud_item in input_str.split(";") %}
    {% set stud = dict(stud_item.split(",") | map("split", "=") | list) %}
    {{ stud.studName }}
{% endfor %}

运行后输出结果:

valueB
ValueD

方案2:一行列表推导写法

如果你需要保留列表推导的写法,将内部的生成器替换为Jinja2支持的过滤器写法即可:

{% set input_str = "studId=ValueA,studName=valueB;studId=ValueC,studName=ValueD" %}
{% for stud in [dict(g.split(",")|map("split", "=")|list) for g in input_str.split(";")] %}
    {{ stud.studName }}
{% endfor %}

两种方案都可以实现和你原生Python代码完全相同的解析遍历效果。
建议优先使用方案1,嵌套逻辑拆分后更易调试和维护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:09:03