oujood.com

Comment utiliser la boucle for dans les templates Django?

Cet article porte sur l'utilisation de la balise for dans les templates ( modèles ). La balise for boucle sur chaque élément d'un tableau, rendant l'élément disponible dans une variable.
Django, étant basé sur Python, utilise un modèle similaire de boucle for avec seulement des différences mineures dans la syntaxe

chercher |

Dans ce tutoriel pour tester les exemples, comme touts les tutoriels de cette section sur le langage de template python, nous utilisons l’application testes que nous avons créé au début de cette section.

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))




Voir aussi nos tutoriel :

fonction date_default_timezone_set

Définit le décalage horaire par défaut de toutes les fonctions date/heure

les cookies

Les cookies : Définition et utilisation des cookies en javascript.

Balise texte pré formaté pre

Définit le texte pré formaté