你也可以使用regroup
模板标签按属性进行分组。来自文档:
cities = [
{'name': 'Mumbai', 'population': '19,000,000', 'country': 'India'},
{'name': 'Calcutta', 'population': '15,000,000', 'country': 'India'},
{'name': 'New York', 'population': '20,000,000', 'country': 'USA'},
{'name': 'Chicago', 'population': '7,000,000', 'country': 'USA'},
{'name': 'Tokyo', 'population': '33,000,000', 'country': 'Japan'},
]
...
{% regroup cities by country as countries_list %}
<ul>
{% for country in countries_list %}
<li>{{ country.grouper }}
<ul>
{% for city in country.list %}
<li>{{ city.name }}: {{ city.population }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
看起来像这样:
- 印度
- 孟买:19,000,000
- 加尔各答:15,000,000
- 美国
- 纽约:20,000,000
- 芝加哥:7,000,000
- 日本
我认为它也适用于 QuerySet
s。
来源:https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#regroup
编辑:请注意,如果你的字典列表没有按键排序,regroup
标签不会像你预期的那样工作。它会迭代地工作。因此,在将其传递给 regroup
标签之前,请通过分组器的键对列表(或查询集)进行排序。
Members.objects.filter(date=some_date).values('designation').annotate(dcount=Count('designation'))
- EliMembers.objects.order_by('disignation').values('designation').annotate(dcount=Count('designation'))
- bjunix