OUJOOD.COM
Dans ce tutoriel, on repart de l'application testes créée dans le chapitre précédent. Si vous l'avez bien en place, vous pouvez suivre les exemples tels quels.
Qu'est-ce qu'une balise de template ?
Dans un template Django, vous pouvez écrire bien plus que du HTML. Vous pouvez tester des conditions, boucler sur des listes, charger des données depuis la base — tout ça directement dans le fichier HTML, avant que la page soit envoyée au navigateur.
Ces instructions spéciales s'appellent des balises de template. Elles se distinguent du HTML classique par leur syntaxe particulière : elles sont entourées de {% %}.
Syntaxe de base :
{% nom_de_la_balise %}
Exemple avec csrf_token, qui protège un formulaire contre les attaques CSRF :
{% csrf_token %}
Certaines balises acceptent des arguments. La balise cycle, par exemple, alterne entre plusieurs valeurs à chaque tour de boucle :
{% cycle 'odd' 'even' %}
Premier exemple : la balise if
La balise {% if %} fonctionne comme une instruction conditionnelle classique. Elle vérifie la valeur d'une variable et affiche un contenu différent selon le résultat.
Dans cet exemple, views.py envoie une variable ma_variable avec la valeur 1. Le template vérifie cette valeur et affiche "Bonjour" ou "Au revoir" en conséquence.
Fichier testes/views.py :
from django.http import HttpResponse
from django.template import loader
def testing(request):
template = loader.get_template('template.html')
context = {
'ma_variable': 1, # On passe la valeur 1 au template
}
return HttpResponse(template.render(context, request))
Fichier testes/template.html :
<!DOCTYPE html>
<html>
<body>
{% if ma_variable == 1 %}
<h1>Bonjour</h1>
{% else %}
<h1>Au revoir</h1>
{% endif %}
<p>Dans views.py, changez la valeur de ma_variable pour voir l'autre message s'afficher.</p>
</body>
</html>
Deuxième exemple : la balise for
La balise {% for %} parcourt une liste ou un queryset Django. C'est l'outil qu'on utilise dès qu'on veut afficher plusieurs enregistrements depuis la base de données — une liste de membres, de produits, d'articles.
Ici, views.py récupère tous les membres depuis le modèle Membres et les transmet au template, qui les affiche dans une liste HTML.
Fichier testes/template.html :
<!DOCTYPE html>
<html>
<body>
<ul>
{% for x in mesmembres %}
<li>{{ x.prenom }}</li> <!-- x représente chaque membre à chaque tour -->
{% endfor %}
</ul>
<p>Dans views.py, vous pouvez voir comment importer et récupérer les membres depuis la base.</p>
</body>
</html>
Fichier testes/views.py :
from django.http import HttpResponse, HttpResponseRedirect
from django.template import loader
from .models import Membres
def testing(request):
mesmembres = Membres.objects.all().values() # Récupère tous les membres
template = loader.get_template('template.html')
context = {
'mesmembres': mesmembres, # Passe la liste au template
}
return HttpResponse(template.render(context, request))
Les prochains chapitres approfondissent chaque balise une par une, avec des exemples dédiés.
Liste complète des balises de template Django
Voici toutes les balises disponibles dans le système de templates de Django. Certaines sont très courantes (if, for, block, extends), d'autres plus spécialisées.
| Balise | Description |
|---|---|
| autoescape | Active ou désactive l'échappement automatique du contenu HTML. |
| block | Définit une zone de contenu remplaçable dans un template parent. |
| comment | Délimite un bloc de commentaire ignoré par Django lors du rendu. |
| csrf_token | Génère un jeton de sécurité pour protéger les formulaires contre les attaques CSRF. |
| cycle | Alterne entre plusieurs valeurs à chaque itération d'une boucle. |
| debug | Affiche des informations de débogage sur le contexte et les modules chargés. |
| extends | Indique qu'un template hérite d'un template parent. |
| filter | Applique un ou plusieurs filtres à un bloc de contenu. |
| firstof | Retourne la première variable non vide parmi une liste de variables. |
| for | Parcourt chaque élément d'une liste ou d'un queryset. |
| if | Évalue une condition et affiche du contenu différent selon le résultat. |
| ifchanged | Dans une boucle for, affiche un bloc uniquement si la valeur a changé depuis le tour précédent. |
| include | Insère le rendu d'un autre template à l'emplacement de la balise. |
| load | Charge des balises ou filtres personnalisés depuis une bibliothèque externe. |
| lorem | Génère un texte de remplissage aléatoire, utile pour les maquettes. |
| now | Affiche la date et l'heure actuelles selon un format personnalisable. |
| regroup | Regroupe une liste d'objets selon la valeur d'un attribut commun. |
| resetcycle | Réinitialise le compteur d'une balise cycle active. |
| spaceless | Supprime les espaces blancs entre les balises HTML d'un bloc. |
| templatetag | Permet d'afficher les caractères spéciaux du système de templates ({%, %}, etc.). |
| url | Génère une URL absolue à partir du nom d'une vue Django. |
| verbatim | Délimite un bloc que Django ne doit pas interpréter — pratique pour les templates JavaScript. |
| widthratio | Calcule un ratio de largeur, souvent utilisé pour des barres de progression en HTML. |
| with | Crée un alias pour une variable complexe ou coûteuse à recalculer dans un bloc. |
Par carabde | Mis à jour le 19 mai 2026