08 Les templates
Pensez à relancer vos tests au fur et à mesure de votre avancé pour vérifier le fonctionnement de votre application.
Une petite merveille !
Le langage de templating offert par Django est sans aucun doute l'un de ses points forts face aux frameworks de même type. Élégant, puissant et très simple, le templating sous Django est un jeu d'enfant !
Les classiques : exploitation de variables de contexte
Comme tout langage de template (Smarty, Jade, FreeMaker…), le moteur de templating de Django permet de manipuler des variables au sein d'un contenu textuel.
Affichage d'une variable
Les variables sont repérées par des doubles accolades : {{ ma_variable }}.
Filtres
Le moteur de template de Django accepte un certain nombre de filtres lors de l'utilisation de variables. Ces filtres permettent d'appliquer des traitements de mise en forme aux variables, est sont invoqués à l'aide d'un pipe : {{ ma_variable|filtre }}. Voir la liste des filtres disponibles.
Itération sur une liste ou un dictionnaire
Il est très courant de devoir exploiter une variable de type liste ou dictionnaire. Les listes manipulées sont généralement des QuerySets, c'est à dire le résultat d'une requête en BDD. Bien souvent, il s'agit de parcourir les données pour les afficher, soit dans un tableau, soit dans une liste à puces ..
Le langage de template de Django fournit à ce propos une boucle for simple et proche de celle proposée en Python (c'est à dire fondée sur le design pattern iterateur.).
<ul>
{% for game in latests_games %}
<li>{{ game.title }}</li>
{% endfor %}
</ul>
Conditions simples
Autre opération que l'on doit souvent réaliser dans un template : l'évaluation de conditions. Une structure conditionnelle simple est proposée par le langage de template de Django.
Imaginons que nous souhaitions nous assurer qu'une liste contient bien des valeurs avant de l'afficher :
{% if games %}
<ul>
{% for game in games %}
<li>{{ game.title }}</li>
{% endfor %}
</ul>
{% else %}
Aucun jeux.
{% endif %}
Autres outils
Pour une liste détaillée des fonctionnalités disponibles dans le langage, voyez la documentation officielle consacrée au langage de template de Django.
Extension de template
C'est une fonctionnalité extrêmement puissante et appréciable : les templates Django peuvent être réutilisés et spécialisés par d'autres templates.
Nous commençons par définir un template de base, par exemple :
_base.html
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}Games Plus{% endblock %}</title>
</head>
<body>
{% block body %}{% endblock %}
</body>
</html>
Vous remarquez que le template comporte des blocks : un block est une portion de contenu nommée. Notre template _base.html comporte ainsi deux blocks : title et body.
Créons à présent un autre template qui étendra notre template de base. Pour cela, nous créons un nouveau fichier index.html, dont la première ligne précisera le template de base à étendre :
index.html
{% extends "_base.html" %}
{% block title %}{{ INDEX PAGE TITLE }}{% endblock %}
{% block body %}
HELLO WORLD
{% endblock %}
A vous de vous lancez pour créer les deux templates pour la page d'accueil et la page de revue d'un jeu.
Reverse URL
Pour créer une url, par exemple vers la page de revue d'un jeu, Django intègre un balise de template url qui permet de générer l'url vers un contrôleur.
{% url 'games_review:game' game.slug %}