2012-03-29 2 views
1

Ich habe diesen Code in meinem views.py:Gruppierung Sortierung dann in Vorlage django

[{'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'},] 

in meiner Vorlage:

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) 

ich diese dann bekam

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

I wirklich möchte out-Put ist wie folgt:

Category A: 
Mike 20 
Bell 30 

Category B: 
Ned 23 
Ben 21 
Tom 28 

Hat jemand eine Idee zu meinem Fall? Dank im Voraus ...

Antwort

2

Sie können

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

Beachten Sie, dass values:

eine ValuesQuerySet Returns - eine QuerySet Unterklasse, die Wörterbücher, wenn sie als iterable verwendet zurückgibt anstelle von Modellinstanzobjekten.

so können Sie diese entfernen:

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

und ändern Sie die Neugruppierung zu:

{% regroup persons by category as people_list %} 
+0

Dank für die Hilfe pastylegs ... – gadss