OUJOOD.COM
Balise de template boucle for dans django
Une boucle for est utilisée pour itérer sur une séquence, comme le fait de boucler sur les éléments d'un tableau, d'une liste ou d'un dictionnaire. La syntaxe est:{% for i in list %} # code à exécuter {% endfor %}Exemple Parcourir en boucle les éléments d'une liste : Fichier testes/templates/template.html
Fichier testes/templates/template.html 📋 Copier le code
<!DOCTYPE html> <html> <body> <!DOCTYPE html> <html> <body> <h1>Liste des fruits :</h1> <ul> {% for x in fruits %} <li>{{ x }}</li> {% endfor %} </ul> <p>Dans le fichier views.py, vous pouvez voir à quoi ressemble la variable fruits.</p> </body> </html> </body> </html>
from django.http import HttpResponse from django.template import loader def testing(request): template = loader.get_template('template.html') context = { 'fruits': ['Orange', 'Banane', 'serise','pomme','avocat'], } return HttpResponse(template.render(context, request))
Exemple Boucle dans un dictionnaire :
Fichier testes/templates/template.html 📋 Copier le code
<!DOCTYPE html> <html> <body> <h1>Marques de voitures françaises :</h1> <dl> {% for x in voitures %} <dt>Marque :{{ x.marque }}</dt> <dd>Année : {{ x.annee }}</dd> {% endfor %} </dl> <p>Dans le fichier views.py, vous pouvez voir à quoi ressemble la variable voitures.</p> </body> </html>
Fichier testes/views.py : 📋 Copier le code
from django.http import HttpResponse from django.template import loader def testing(request): template = loader.get_template('template.html') context = { 'voitures': [ {'marque': 'BUGATTI' , 'annee': '1909'}, {'marque':'CHRYSLER', 'annee':'1970-1979' }, {'marque':'CITROëN', 'annee':'Depuis 1919' }, {'marque':'DS', 'annee':'2014 '}, {'marque':'DELAHAYE','annee':'1935-1954'}, {'marque':'FACEL-VEGA','annee':'1954-1964'}, {'marque':'FORD ','annee':'1916-1954 '}, {'marque':'PANHARD','annee':'1890-1967'},], } return HttpResponse(template.render(context, request))
Boucle sur des données provenant d'un model(Base de données)
Les données d'un model correspondent à une table de base de données avec des lignes et des colonnes.Le model Membres que nous avons créé dans un chapitre précédent comporte cinq lignes, et chaque ligne comporte trois colonnes.
Lorsque nous récupérons des données à partir du model, elles se présentent sous la forme d'un objet QuerySet, dont le format est similaire à celui de l'exemple des voitures ci-dessus : boucle sur un dictionnaires.
Exemple Boucle à travers les éléments récupérés dans une base de données :
Fichier testes/templates/template.html 📋 Copier le code
<!DOCTYPE html> <html> <body> <h1>Liste des membres :</h1> <table><tr><th>Prénom</th><th>Nom</th><th>Email</th></tr> {% for x in membres %} <tr> <td>{{ x.prenom }}</td> <td> {{ x.nom }}</td> <td>{{x.mail}}</td> </tr> {% endfor %} </table> </body> </html>
Fichier testes/views.py : 📋 Copier le code
from django.http import HttpResponse, HttpResponseRedirect from django.template import loader from .models import Membres def testing(request): monmembres = Membres.objects.all().values() template = loader.get_template('template.html') context = { 'membres': monmembres, } return HttpResponse(template.render(context, request))
Le mot clé " reversed "
Le mot-clé reversed est utilisé lorsque vous souhaitez effectuer la boucle dans un ordre inversé.La boucle va commencer à partir du dernier enregistrement de la table de données.
pour cela il suffit de modifier le code du fichier templete ci dessus en ajoutant le mot clé reversed dans la balise for comme le montre l'exemple ci dessous :
{% for x in membres reversed %} <tr> <td>{{ x.prenom }}</td> <td> {{ x.nom }}</td> <td>{{x.mail}}</td> </tr> {% endfor %}
Le mot-clé empty
Le mot-clé empty peut être utilisé si vous voulez effectuer une action spéciale si l'objet est vide ou n'éxiste pas.Fichier testes/templates/template.html 📋 Copier le code
<!DOCTYPE html> <html> <body> <h1>Liste des membres :</h1> <ul> {% for x in monobjet %} {% empty %} <li>Aucun membre trouvé</li> {% endfor %} </ul> </body> </html>
Fichier testes/views.py : 📋 Copier le code
from django.http import HttpResponse, HttpResponseRedirect from django.template import loader from .models import Membres def testing(request): monmembres = Membres.objects.all().values() template = loader.get_template('template.html') context = { 'monobjet' : [], } return HttpResponse(template.render(context, request))