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

Jinja2遍历字典列表报错'list object' has no attribute 'items'如何解决

报错原因

  • 首先排查变量传参错误:你当前模板中拿到的dict变量实际是嵌套列表(比如结构为[[{'symbol': 'BTCUSDT',...}, ...]]),而非你预期的单层字典列表。外层循环第一次遍历拿到的元素依然是列表类型,调用.items()方法自然会触发属性不存在的报错,哪怕简化遍历逻辑,你拿到的也是内层列表而非字典元素。
  • 其次避免使用Python内置关键字作为变量名:dict是Python字典类型的内置标识符,作为自定义变量名使用可能引发不可预期的命名冲突,建议改为更具语义的名称比如symbol_price_list。

正确实现代码

首先修正后端传参,确保传入模板的变量是单层字典列表,示例传参逻辑(以Flask为例):

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    # 确保是单层列表,不要额外嵌套
    symbol_price_list = [
        {'symbol': 'BTCUSDT', 'price': 59325.1234, 'Qty': 2501},
        {'symbol': 'ETHUSDT', 'price': 55.12, 'Qty': 14}
    ]
    # 传参的键名要和模板中使用的变量名一致
    return render_template('your_template.html', symbol_price_list=symbol_price_list)

对应Jinja2模板代码:

{% for dict_item in symbol_price_list %}
    <!-- 排查问题时可以先打印当前元素类型确认结构 -->
    <!-- <p>元素类型:{{ dict_item.__class__.__name__ }}</p> -->
    {% for key, value in dict_item.items() %}
        <h1>Key: {{key}}</h1>
        <h2>Value: {{value}}</h2>
    {% endfor %}
{% endfor %}

如果确认传入的是嵌套列表且无法修改数据源,也可以调整模板循环逻辑适配:

<!-- 适配嵌套列表的场景,先遍历外层列表取到内层字典列表 -->
{% for inner_list in symbol_price_list %}
    {% for dict_item in inner_list %}
        {% for key, value in dict_item.items() %}
            <h1>Key: {{key}}</h1>
            <h2>Value: {{value}}</h2>
        {% endfor %}
    {% endfor %}
{% endfor %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:45:02