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

在Flask中如何在Python表达式内获取Jinja2循环的索引?

解决Flask模板表格展示字典列表的语法错误

错误原因

你的模板代码存在几个关键问题:

  1. Jinja2语法违规:在{{ }}块内部嵌套了另一个{{ }},Jinja2会将整个{{ }}内的内容当作Python表达式解析,不需要额外嵌套标记。
  2. 列表访问方式错误:你用了函数调用的data(...)格式,Python列表元素的正确访问方式是方括号data[...]。
  3. 冗余的元素获取:循环{% for person in data %}已经将列表中的每个字典赋值给了person变量,直接使用这个变量就能获取对应字段,完全不需要借助loop.index重新索引列表。

修正后的模板代码

直接使用循环变量person访问字段,这是最简洁且正确的写法:

<!DOCTYPE html>
<html>
<body>
    <table>
      <tr>
        <th>Name</th>
        <th>Age</th>
      </tr>
      {% for person in data %}
      <tr>
        <td>{{ person["name"] }}</td>
        <td>{{ person["age"] }}</td>
        <!-- 也可以用点语法简化:{{ person.name }}、{{ person.age }} -->
      </tr>
      {% endfor %}
    </table>
</body>
</html>

若非要使用loop.index(不推荐)

如果确实需要通过索引访问列表元素,正确写法是去掉嵌套的{{ }},直接在表达式里使用loop.index,注意Jinja2的loop.index从1开始,而Python列表索引从0开始,需要减1:

<td>{{ data[loop.index - 1]["name"] }}</td>
<td>{{ data[loop.index - 1]["age"] }}</td>

额外注意

你的后端代码里render_template("index.html", data=dummy_data)是正确的,但错误日志显示你渲染的是app.html,请确保模板文件名一致,避免出现找不到模板的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:52:31