Considérons, tout d'abord, le cas simple, où on veut dans le template créer un tableau en utilisant une boucle "for" à partir d'un "queryset", on procède alors généralement comme ceci, dans views.py :
def MyView(request):
MyQuerySet = Article.objects.order_by('-modified')
return render_to_response("MyApp/exemple.html", {'MyQuerySet':MyQuerySet}, context_instance=RequestContext(request))
et dans le template (intitulé ici exemple.html)
<table class="table table-striped">
<tr>
<th> Article title </th>
<th> Article last modified </th>
</tr>
{% for i in MyQuerySet %}
<tr>
<td style="width:60%">
{{ i.title }}
</td>
<td style="width:40%">
{{ i.modified }}
</td>
</tr>
{% endfor %}
</table>
Maintenant comment faire si on veut faire une seule boucle "for" sur 2 ou plusieurs "queryset" dans le template, car les informations qu'on souhaite afficher dans le tableau sont stockées dans plusieurs tables. Une solution possible est d'utiliser la fonction python zip afin de concatener les différents queryset dans une liste (intitulé ici MyListQuerySet) et de passer cette liste dans le template, comme dans cet exemple, dans views.py:
def MyView(request):
MyQuerySet1 = Article.objects.order_by('-modified')
MyQuerySet2 = ArticleRevison.objects.order_by('-modified')
MyQuerySet3 = Article.objects.order_by('-modified')
MyListQuerySet = zip(MyQuerySet1, MyQuerySet2, MyQuerySet3)
return render_to_response("MyApp/exemple.html", {'MyListQuerySet':MyListQuerySet}, context_instance=RequestContext(request))
et dans le template (intitulé ici exemple.html)
<table class="table table-striped">
<tr>
<th> Article title </th>
<th> Article last modified </th>
<th> Article content </th>
<th> Article author </th>
</tr>
{% for i,j,k in MyListQuerySet %}
<tr>
<td style="width:40%">
{{ i.title }}
</td>
<td style="width:20%">
{{ i.modified }}
</td>
<td style="width:20%">
{{ j.content }}
</td>
<td style="width:20%">
{{ k.author }}
</td>
</tr>
{% endfor %}
</table>
Recherches associées
Liens | Site |
---|---|
build-in zip | python doc |
Traversing multiple lists in django template in same for loop | stackoverflow |
Creating a list of objects in Python | stackoverflow |
is there a way to loop over two lists simultaneously in django? | stackoverflow |
What is a django QuerySet? | stackoverflow |
QuerySet API reference | Django Doc |
Classes | python doc |