Flask Jinja2如何通过变量名动态访问对象的属性值
Jinja2模板动态按变量名获取对象属性解决方案
你原来的写法中,row.column的点语法会将column识别为固定的属性名,而非你定义的column变量,所以无法实现动态取值,解决方案如下:
- 最通用的方案:使用Jinja2内置的
attr过滤器,直接将{{ row.column }}替换为{{ row|attr(column) }}即可,该方案支持ORM模型实例、普通类实例等多种对象类型。 - 特殊场景适配:如果你的
row是字典类型而非类实例对象,也可以直接用下标取值:{{ row[column] }}。 - 容错优化:如果存在部分行缺少对应属性的场景,可以搭配
default过滤器避免模板渲染报错:{{ row|attr(column)|default('-', boolean=True) }}
修改后的完整代码如下:
{% for row in rows.items %} <tr> {% for column in model_settings['table_columns'] %} <td> <p>{{ row|attr(column) }}</p> </td> {% endfor %} </tr> {% endfor %}
内容的提问来源于stack exchange,提问作者Logtism
相关产品推荐
相关产品推荐

