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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:10:24