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

Jinja2用动态列名取SQLAlchemy查询结果报语法错误如何解决?

Flask项目Jinja2模板动态取值报错解决办法

错误原因

报错的核心原因是Jinja2模板不支持嵌套的{{ }}语法,你写的{{all.{{item}}}}属于语法错误,Jinja2解析器无法识别这种嵌套取值的写法。

解决方法

有两种常用的取值方式可以实现动态从SQLAlchemy模型对象里取对应字段的值:

方法1:方括号动态取值

你已经验证过all["S_NO"]可以正常运行,直接把动态的item变量放到方括号里即可,修改模板代码如下:

{% for all_obj in data %}
<tr>
    {% for item in asked %}
    <td>{{ all_obj[item] }}</td>
    {% endfor %}
</tr>
{% endfor %}

提示:这里将循环变量名从all改为all_obj,避免和Python内置函数all重名引发潜在问题。

方法2:使用Jinja2内置attr过滤器

如果方括号取值在特殊场景下不生效,也可以用Jinja2自带的attr过滤器实现动态取属性:

<td>{{ all_obj|attr(item) }}</td>

补充注意事项

  • Jinja2的控制语句(如for、if)末尾不需要加Python语法中的冒号,你原模板代码中{% for item in asked: %}的冒号需要删除,否则也可能触发语法错误
  • 后端home视图函数的render_template方法中用到了未定义的failure_event变量,需要提前定义该变量的值,否则会触发后端变量未定义报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 08:15:03