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

