Jinja2遍历含多值的Python字典失败,求正确实现方案
问题解决:Jinja2遍历字典列表数据的正确方式
你的代码无法显示内容的核心原因是:直接遍历my_dict只会得到字典的键名(比如quiz_id、quiz_title、score),而非你期望的每行数据对象。你的字典结构是「键对应同长度的列表」,需要把三个列表中的元素按索引一一配对后再遍历。
下面提供两种可行的解决方法:
方法1:后端预处理数据(推荐)
在后端(如Flask/Django)将原字典转换为列表套字典的结构,再传递给模板:
# 后端处理代码 my_list = [ {"quiz_id": qid, "quiz_title": qt, "score": s} for qid, qt, s in zip(my_dict["quiz_id"], my_dict["quiz_title"], my_dict["score"]) ] # 将my_list传入模板,替代原my_dict
模板中使用以下代码遍历:
{% for data in my_list %} <div class="row border-bottom"> <div class="col-2 my-3"> {{ data.quiz_id }} </div> <div class="col-7 my-3 text-start"> {{ data.quiz_title }} </div> <div class="col-3 my-3"> {{ data.score }} </div> </div> {% endfor %}
方法2:直接在Jinja2模板中处理
Jinja2支持zip函数,可直接在模板中把三个列表配对遍历:
{% for qid, qtitle, s in zip(my_dict.quiz_id, my_dict.quiz_title, my_dict.score) %} <div class="row border-bottom"> <div class="col-2 my-3"> {{ qid }} </div> <div class="col-7 my-3 text-start"> {{ qtitle }} </div> <div class="col-3 my-3"> {{ s }} </div> </div> {% endfor %}
注意:原代码还有一处错误——字典中分数对应的键是
score,而非你写的quiz_score,上述两种方法已修正该问题。
内容的提问来源于stack exchange,提问作者Aristotle
相关产品推荐
相关产品推荐

