Jinja模板中按指定表头顺序在HTML渲染字典值问题
解决Jinja2中按指定键顺序渲染字典列表的问题
嘿,我懂你碰到的这个坑!你用{{ result.header }}的时候,Jinja2会把header当成字典里一个叫header的固定键来查找,但你实际想要的是用循环里的header变量作为键去取对应的值对吧?
修正方法
在Jinja2里,当你需要用变量作为字典的键来取值时,得用方括号索引的方式,而不是点语法。把你的代码改成这样就行:
{% for result in results %} <tr> {% for header in headers %} <td>{{ result[header] }}</td> {% endfor %} </tr> {% endfor %}
为什么原来的代码不行?
Jinja2的点语法(比如result.first)有两个作用:
- 访问对象的属性
- 访问字典中固定名称的键(相当于
result['first'])
但当你的键是一个变量(比如循环里的header),点语法就失效了,这时候必须用方括号result[header],它会把header的值当成键去查找字典里对应的内容。
完整示例(包含表头)
为了让你能直接复用,这里给个带表头的完整表格代码:
<table> <thead> <tr> {% for header in headers %} <th>{{ header|capitalize }}</th> <!-- 可以用过滤器把键名转成首字母大写的表头 --> {% endfor %} </tr> </thead> <tbody> {% for result in results %} <tr> {% for header in headers %} <td>{{ result[header] }}</td> {% endfor %} </tr> {% endfor %} </tbody> </table>
这样就能完美按照headers列表指定的顺序,渲染每个字典里对应的值啦!
内容的提问来源于stack exchange,提问作者Mateusz Korbut
相关产品推荐
相关产品推荐

