Django模板遍历字典仅显示最后一项?求问题原因与解决方法
Django模板仅显示最后一条数据的问题排查与修复
问题根源
1. 结果存储方式错误
你当前的代码里,results每次循环都会被重新赋值为单个字典,之前循环生成的数据会被直接覆盖,最终results里只保留了最后一次循环的结果,模板自然只能遍历到一条数据。
2. 返回响应的时机错误
从代码缩进来看,return render(...)被放在了外层循环内部,这会导致程序在处理第一个Performance对象时就直接返回页面响应,后续的循环根本没机会执行,最终只能拿到第一条用户的最后一个total值。
修复代码
先把results初始化为空列表,每次循环将生成的字典追加进去,同时把返回响应的代码移到所有循环外面:
# 初始化空列表存储所有结果 results = [] for u in Performance.objects.raw('SELECT * FROM...'): name = f"{u.last_name} {u.first_name}" for e in Projekt_perf.objects.raw('SELECT stressz_profile.id...'): total = e.total # 将单个结果字典追加到列表,而非覆盖 results.append({'name': name, 'total': total}) # 所有数据处理完成后再构建上下文并返回 context = { 'results': results, } return render(request, 'performance/list.html', context)
模板使用说明
修复后results是包含多个字典的列表,你的模板遍历代码可以正常工作:
{% for r in results %} {{ r.name }} - {{ r.total }} {% endfor %}
额外提示:如果每个用户对应唯一的total值,建议优化数据库查询逻辑,比如用Django的annotate聚合查询或者关联查询替代嵌套循环,减少数据库请求次数,提升性能。
内容的提问来源于stack exchange,提问作者Oriza
相关产品推荐
相关产品推荐

