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
相关产品推荐
相关产品推荐

