Django模板按日期年份分组问题:代码无法正常运行
解决Django模板按Datetime年份分组失效问题
Django的regroup标签生效的前提是被分组的列表必须先按分组依据的字段排序,如果你的notificacoes查询集未提前排序,同一年份的条目如果不连续,会被拆成多个分组,看起来就像代码没生效。
解决方法
1. 后端查询时提前排序(推荐)
在视图中给查询集加上排序逻辑,确保数据按criados字段排序:
# 正序排序(从旧到新) notificacoes = Notificacao.objects.all().order_by('criados') # 或者按年份倒序(从新到旧) notificacoes = Notificacao.objects.all().order_by('-criados__year')
2. 模板内临时排序(仅小数据量使用)
如果无法修改后端代码,也可以在模板中用dictsort过滤器先排序,不过这种方式性能不如后端排序,不适合大数据集:
{% regroup notificacoes|dictsort:"criados" by criados|date:"Y" as criados_list %} <ul> {% for x in criados_list %} <li> {{ x.grouper }} <ul> {% for y in x.list %} <li>{{ y.slug }} : {{ y.arquivo }}</li> {% endfor %} </ul> </li> {% endfor %} </ul>
额外排查点
- 确认
criados字段在模型中是DateTimeField或DateField类型,否则date过滤器无法正常解析年份。 - 检查
notificacoes查询集是否包含有效数据,空数据集不会显示任何分组内容。
内容的提问来源于stack exchange,提问作者Lucas Medeiros
相关产品推荐
相关产品推荐

