logo oujood
🔍

Les balises de template Django

Dans Django, les balises de template permettent d'ajouter une vraie logique à vos fichiers HTML : conditions, boucles, héritage de pages, récupération de données depuis la base. C'est ce qui transforme un fichier HTML statique en une page dynamique générée côté serveur.

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 :

  📋 Copier le code

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 :

  📋 Copier le code

<!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 :

  📋 Copier le code

<!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 :

  📋 Copier le code

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.

BaliseDescription
autoescapeActive ou désactive l'échappement automatique du contenu HTML.
blockDéfinit une zone de contenu remplaçable dans un template parent.
commentDélimite un bloc de commentaire ignoré par Django lors du rendu.
csrf_tokenGénère un jeton de sécurité pour protéger les formulaires contre les attaques CSRF.
cycleAlterne entre plusieurs valeurs à chaque itération d'une boucle.
debugAffiche des informations de débogage sur le contexte et les modules chargés.
extendsIndique qu'un template hérite d'un template parent.
filterApplique un ou plusieurs filtres à un bloc de contenu.
firstofRetourne la première variable non vide parmi une liste de variables.
forParcourt chaque élément d'une liste ou d'un queryset.
ifÉvalue une condition et affiche du contenu différent selon le résultat.
ifchangedDans une boucle for, affiche un bloc uniquement si la valeur a changé depuis le tour précédent.
includeInsère le rendu d'un autre template à l'emplacement de la balise.
loadCharge des balises ou filtres personnalisés depuis une bibliothèque externe.
loremGénère un texte de remplissage aléatoire, utile pour les maquettes.
nowAffiche la date et l'heure actuelles selon un format personnalisable.
regroupRegroupe une liste d'objets selon la valeur d'un attribut commun.
resetcycleRéinitialise le compteur d'une balise cycle active.
spacelessSupprime les espaces blancs entre les balises HTML d'un bloc.
templatetagPermet d'afficher les caractères spéciaux du système de templates ({%, %}, etc.).
urlGénère une URL absolue à partir du nom d'une vue Django.
verbatimDélimite un bloc que Django ne doit pas interpréter — pratique pour les templates JavaScript.
widthratioCalcule un ratio de largeur, souvent utilisé pour des barres de progression en HTML.
withCrée un alias pour une variable complexe ou coûteuse à recalculer dans un bloc.

Par carabde | Mis à jour le 19 mai 2026