然后分组然后在模板django中排序

时间:2012-03-29 06:39:47

标签: python django django-templates

我在views.py中有这些代码:

array = []
p = Person.objects.filter(client=1,status='Complete').values('name', 'age', 'category').order_by('category')
for x in p:
 d = {'Name': x['name'], 'Age': x['age'], 'Category':x['category']}
 array.append(d)

然后我得到了这些:

[{'Name': u'Mike', 'Age': 20, 'Category':'A'},
{'Name': u'Bell', 'Age': 30, 'Category':'A'},
{'Name': u'Ned', 'Age': 23, 'Category':'B'},
{'Name': u'Ben', 'Age': 21, 'Category':'B'},
{'Name': u'Tom', 'Age': 28, 'Category':'B'},]

在我的模板中:

{% if persons %}
 {% for p in persons %}
   Category {{p.Category}} :<br>{{p.Name}} <br> {{p.Age}}
 {% endfor %}
{% endif %}

我真的想要输出是这样的:

Category A:
Mike 20
Bell 30

Category B:
Ned 23
Ben 21
Tom 28

有人对我的案子有所了解吗? 提前谢谢......

1 个答案:

答案 0 :(得分:2)

您可以使用regroup模板标记

{% if persons %}
    {% regroup persons by "Category" as people_list %}
    {% for key, val in people_list.items %}
        {{ key|title }} : <br /> {{ val|title }}
    {% endfor %}
{% endif %}

请注意values

  

返回一个ValuesQuerySet - 一个QuerySet子类,当用作可迭代的而不是模型实例对象时返回字典。

所以你可以删除它:

for x in p:
    d = {'Name': x['name'], 'Age': x['age'], 'Category':x['category']}
    array.append(d)

并将重新组合更改为:

{% regroup persons by category as people_list %}