You need to enable JavaScript to run this app. Django模板遍历分组嵌套字典时gbv[item]语法报错如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Django模板遍历分组嵌套字典时gbv[item]语法报错如何解决?

问题原因

Django 模板系统不支持 Python 原生的方括号[]下标取值语法,不管是取字典值、列表元素还是对象属性,统一使用点号.进行访问。你写的gbv[item]属于Python原生语法,不符合Django模板规则,因此触发语法报错。

解决方案

最简便的写法是直接遍历字典的items键值对,不需要单独通过key取value,模板代码修改如下:

{% block content %}
{% for tag, task_list in gbv.items %}
- {{ tag }}:
{% for task in task_list %}
-- {{ task.name }}
{% endfor %}
{% endfor %}
{% endblock content %}

渲染后就会完全符合你需要的展示格式。

视图代码优化建议

你当前的视图写法存在N+1查询性能问题:如果有N个不同的tag,会执行1次查询去重tag + N次查询对应tag的任务,数据量大时性能很差,可以用itertools.groupby优化为单次数据库查询:

from itertools import groupby

def bytag(request):
    # groupby要求同组元素连续,因此先按tag字段排序
    all_tasks = Task.objects.order_by('tag').all()
    # 按tag分组生成字典
    group_by_value = {tag: list(tasks) for tag, tasks in groupby(all_tasks, key=lambda x: x.tag)}
    context = {'gbv': group_by_value}
    return render(request,'tasks/bytag.html', context)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 02:15:02