PyCharm
The only Python IDE you need.
Le guide ultime des templates Django

Les templates constituent une partie essentielle du framework Django. Comprendre ce qu’ils sont et pourquoi ils sont utiles peut vous aider à créer des templates fluides, adaptables et fonctionnels pour vos sites et applications Django.
Si vous découvrez ce framework et souhaitez créer votre premier projet Django, il est vital de comprendre la nature des templates. Le présent guide explique tout ce qu’il est important de comprendre sur les templates Django, avec notamment les différents types et comment les utiliser.
Qu’est-ce que les templates Django ?
Les templates Django constituent un élément fondamental du framework Django. Ils permettent de séparer la présentation visuelle de votre site de son code sous-jacent. Un template contient les éléments statiques de la sortie HTML voulue, ainsi que la syntaxe spéciale expliquant comment insérer le contenu dynamique.
Enfin, les templates permettent de générer des pages web complètes, tandis que les requêtes de base de données, ainsi que d’autres tâches de traitement, sont traitées par les vues et les modèles. Cette séparation garantit un code net et facile à gérer en isolant la logique métier HTML du code Python dans le reste de votre projet Django. En l’absence de templates, le code HTML est intégré directement dans votre code Python, où il est plus difficile de le lire et de le déboguer.
Voici un exemple de template Django contenant du code HTML, une variable name
et une logique if/else
basique :
Welcome!
{% if name %}
Hello, {{ name }}!
{% else %}
Hello, Guest!
{% endif %}
{{ heading }}
Avantages de l’utilisation des templates
Les développeurs utilisent les templates Django pour créer des applications fiables rapidement et efficacement. Voici les autres avantages clés des templates :
- Réutilisation du code : des composants et des dispositions réutilisables peuvent être créés pour assurer la cohérence entre les pages et les applications.
- Maintenance plus rapide : l’aspect des pages web peut être modifié sans toucher à la logique sous-jacente.
- Lisibilité accrue : le code HTML peut rester propre et lisible sans avoir à recourir à une logique complexe.
- Héritage de template : des structures et dispositions communes peuvent être définies pour réduire la duplication et promouvoir la cohérence.
- Contenu dynamique : il est possible de créer des pages web personnalisées qui s’adaptent aux entrées des utilisateurs et aux variations des données.
- Optimisation des performances : les templates peuvent être mis en cache pour améliorer les performances des applications ou du site web.
Défis et limitations
Les templates sont essentiels pour le rendu des pages web dans Django, mais ils doivent être utilisés de façon raisonnée, notamment pour les projets complexes portant sur des ensembles de données volumineux. En dépit de la simplicité relative du langage de template de Django, des templates trop complexes avec un grand nombre de balises imbriquées, de filtres et de règles d’héritage peuvent devenir difficiles à gérer et à maintenir. Au lieu d’intégrer trop de logique dans vos templates, veillez à ce qu’ils se concentrent sur la présentation. Les options de personnalisation sont également limitées, ce qui vous oblige à créer des balises ou des filtres.
La migration vers un autre moteur de template peut être difficile, car le moteur par défaut de Django est lié directement au framework. Toutefois, le recours à une autre solution, telle que Jinja, est relativement simple, et nous reviendrons sur cette possibilité plus bas dans ce guide.
Débogage des templates Django
Dans certaines situations (notamment en cas de problème), il peut être utile de voir comment votre template fonctionne. Pour cela, vous pouvez utiliser le débogage de template.
Le débogage des templates consiste à identifier les erreurs concernant les interactions entre le code HTML et les données dynamiques. Les problèmes courants incluent des variables manquantes, des balises de template incorrectes et des erreurs de logique.
Heureusement, Django fournit des outils utiles, tels que {{ debug }}
pour l’inspection de vos templates et des pages d’erreur détaillées qui mettent en évidence la source des problèmes. Cela facilite l’identification et la résolution des problèmes, afin d’assurer un rendu exact de vos templates.
Compréhension du DTL (Django Template Language)
Le DTL est le moteur intégré de création de template de Django, conçu pour simplifier la création de pages web dynamiques. Il permet de fusionner de façon fluide le code HTML avec des balises et des filtres propres à Django, ce qui vous permet de créer du contenu enrichi et piloté par les données directement depuis votre application Django. Nous allons explorer les fonctionnalités clés qui font de DTL un outil puissant de création de templates.
Syntaxe et structure basique de DTL
Les templates Django sont écrits avec une combinaison des syntaxes HTML et DTL. La structure basique d’un template Django correspond au langage de marquage HTML associé à des balises et variables Django.
Voici un exemple :
{{ heading }}
- {% for item in item_list %}
- {{ item.name }}
{% endfor %}
Variables, filtres et balises
Le DTL comporte plusieurs fonctionnalités d’utilisation des variables, des filtres et des balises :
- Variables : les variables affichent des données dynamiques dans vos templates. Elles sont entourées par des accolades doubles, comme
{{ variable_name }}
. - Filtres : les filtres modifient ou formatent la valeur d’une variable avant d’effectuer son rendu. Ils sont appliqués au moyen du caractère pipe ( | ), comme
{{ variable_name|upper }}
. - Balises : les balises contrôlent la logique et le flux de vos templates. Elles apparaissent dans des blocs
{% %}
et peuvent effectuer différentes opérations, telles que les boucles, les conditions et les inclusions de templates.
PyCharm, un IDE professionnel de développement Django, simplifie l’utilisation des templates Django en assurant la mise en évidence des éléments de syntaxe, avec des balises de code couleur, des variables et du code HTML pour une meilleure lisibilité. Il permet également de détecter les erreurs en temps réel, ce qui vous évite d’oublier une balise de fermeture ou de vous tromper dans la syntaxe. Grâce à la saisie semi-automatique des variables et des balises, vous pouvez coder plus vite en faisant moins d’erreurs.
Héritage des templates et extension des templates de base
Le système d’héritage de template du framework vous permet de créer un template de base contenant la structure standard et la disposition de votre site web ou de votre application.
Vous pouvez créer des templates enfants qui héritent du template de base et remplacent des blocs spécifiques de sections en fonction des besoins. Cela incite à la réutilisation du code et à davantage de cohérence entre différents templates.
Pour créer un template de base, définissez des blocs avec la balise {% block %}
:
{% block content %} {% endblock %}
Les templates enfants viennent ensuite étendre les templates de base et remplacent certains blocs:
{% extends 'base.html' %} {% block title %}My Page Title{% endblock %} {% block content %}
My Page Content
This is the content of my page. {% endblock %}
Balises de template Django
Les balises constituent un élément essentiel des templates Django. Elles fournissent différentes fonctionnalités, du rendu conditionnel et des boucles, à l’héritage du template et l’inclusion.
Nous allons les examiner ici en détail.
Balises communes de template Django
Django dispose de nombreuses balises de template et nous allons nous limiter aux plus fréquentes :
{% if %}
: cette balise permet d’assurer le rendu conditionnel du contenu en fonction d’une condition spécifique. Elle est souvent utilisée avec les balises{% else %}
et{% elif %}
.{% for %}
: la balise{% for %}
permet d’effectuer une itération sur une séquence, telle qu’une liste ou un ensemble de requêtes, et d’effectuer le rendu du contenu pour chaque élément de la séquence.{% include %}
: cette balise vous permet d’inclure le contenu d’un autre fichier de template dans le template actuel. Elle facilite la réutilisation d’extraits de code de template communs sur plusieurs templates.{% block %}
: la balise{% block %}
est utilisée en conjonction avec l’héritage de template. Elle définit un bloc de contenu qui peut être remplacé par des templates enfants lors de l’extension d’un template de base.{% extends %}
: cette balise spécifie le template de base du template qui sera à la source de l’héritage.{% url %}
: cette balise permet de générer une URL pour un schéma d’URL nommé dans votre projet Django. Elle permet de découpler vos templates des chemins d’URL réels.{% load %}
: la balise{% load %}
permet de charger les balises de template et les filtres personnalisés depuis un module ou une bibliothèque Python, ce qui vous permet d’étendre la fonctionnalité du système de templates Django.
Voici quelques exemples des nombreuses balises de template disponibles dans Django. Des balises comme {% with %}
, {% cycle %}
, {% comment %}
ou autres peuvent fournir davantage de fonctionnalités pour les projets avancés, afin de vous aider à créer plus facilement des applications efficaces et personnalisées.
Utilisation de balises de template
Voici un exemple détaillé illustrant comment utiliser des balises dans un template Django :
{% extends 'base.html' %} {% load custom_filters %} {% block content %}
{{ page_title }}
{% if object_list %}
- {% for obj in object_list %}
- {{ obj.name|truncate:25 }}
{% endfor %}
{% else %} No objects found. {% endif %} {% include 'partials/pagination.html' %} {% endblock %}
Dans cet exemple, nous étendons un template de base, chargeons des filtres personnalisés et définissons un bloc pour le contenu principal.
Dans ce bloc, nous allons vérifier si object_list
existe et, si c’est le cas, nous allons exécuter une boucle pour afficher les noms tronqués de chaque objet. Nous affichons ensuite un message indiquant qu’aucun objet n’a été trouvé si la liste est vide.
Enfin, nous incluons un template partiel pour la pagination. Ce template est un extrait de code HTML réutilisable qui peut être inclus dans d’autres templates, ce qui vous permet de gérer et mettre à jour des éléments communs (tels que la pagination) plus efficacement.
Templates d’administration Django
L’interface d’administration intégrée de Django constitue une solution simple et intuitive de gestion des données de votre application. Elle est basée sur un ensemble de templates définissant sa structure, sa disposition et son aspect.
Fonctionnalité
Les templates d’administration Django gèrent différentes tâches :
- Authentification : contrôle l’authentification des utilisateurs, la connexion et la déconnexion.
- Gestion de modèles : affiche la liste d’instances de modèles et crée, modifie et supprime les instances en fonction des besoins.
- Rendu des formulaires : assure le rendu des formulaires pour créer et modifier des instances de modèle.
- Navigation : effectue le rendu de la structure de navigation de l’interface d’administration, avec notamment le menu principal et les sous-menus propres à l’application.
- Pagination : assure le rendu des commandes de pagination lors de l’affichage des listes d’instances de modèles.
- Suivi de l’historique : affiche et gère l’historique de modification des instances de modèles.
Les templates d’administration intégrés de Django créent une base solide de gestion des données de votre application.
Personnalisation des templates d’administration
Les templates d’administration Django permettent de disposer directement d’une interface fonctionnelle, mais il peut être nécessaire de personnaliser leur aspect ou comportement en fonction des besoins de votre projet.
Vous pouvez modifier le code pour tenir compte des directives de marque de votre projet, pour améliorer l’expérience utilisateur ou ajouter des fonctionnalités propres à votre application.
Plusieurs approches sont possibles :
- Ignorer les templates : vous pouvez ignorer les templates d’administration par défaut en créant des templates avec la même structure de fichiers et convention de nommage en vigueur dans le répertoire de templates de votre projet. Django utilise ensuite automatiquement vos templates personnalisés au lieu des templates intégrés.
- Étendre les templates de base : la plupart des templates d’administration de Django sont basés sur l’héritage à partir d’autres templates. Vous pouvez créer des templates qui étendent les templates d’administration de base et remplacent des blocs ou des sections spécifiques.
- Options des templates : Django dispose de plusieurs options de template qui permettent de personnaliser le comportement de l’interface d’administration. Cela inclut l’affichage de certains champs, en spécifiant ceux qui doivent être modifiables et en définissant des templates personnalisés pour des champs de modèle spécifiques.
- Personnalisation du site d’administration : vous pouvez personnaliser l’aspect du site d’administration et son comportement en créant des sous-classes à partir de la classe
AdminSite
et en enregistrant votre site d’administration personnalisé sur Django.
Templates d’URL dans Django
Les templates d’URL dans Django constituent une solution flexible pour définir et générer des URL pour les applications web.
Comprendre les templates d’URL
Dans Django, vous définissez les schémas d’URL dans le fichier urls.py du projet en utilisant la fonction path du module django.urls.
Ces schémas d’URL relient certains schémas d’URL à des fonctions Python (vues) qui traitent les requêtes HTTP correspondantes.
Voici un exemple de schéma d’URL dans Django :
# urls.py from django.urls import path from . import views urlpatterns = [ path('', views.home, name='home'), path('about/', views.about, name='about'), ]
Dans cet exemple, le schéma d’URL ‘ ‘
mappe la fonction de vue views.home
, tandis que le schéma d’URL ‘about/’
mappe la fonction de vue views.about
.
Génération dynamique d’URL avec les templates d’URL
Les templates d’URL dans Django permettent d’inclure des variables ou des paramètres dans vos schémas d’URL. Cela signifie que vous pouvez créer des URL dynamiques qui représentent différentes instances de la même ressource ou incluent davantage de données.
Si votre fichier urls.py inclut d’autres fichiers d’URL utilisant include()
, PyCharm collecte et reconnaît automatiquement toutes les routes incorporées, ce qui permet de s’assurer que les suggestions de nom d’URL restent exactes. Vous pouvez également naviguer vers les définitions d’URL en effectuant Ctrl+Clic sur un nom d’URL pour accéder directement à sa source, même si l’URL est définie dans un fichier enfant.
Nous allons voir un exemple de template d’URL avec une variable :
# urls.py urlpatterns = [ path('blog//', views.year_archive, name='blog_year_archive'), ]
Dans ce cas, l’URL ‘blog//’
inclut une variable d’année de type int
. Lorsqu’une requête correspond à ce schéma, Django transfère la valeur de l’année en tant qu’argument à la fonction de vue views.year_archive
.
Utilisation des URL Django
Les URL Django constituent la base de toutes les applications et fonctionnent en liant les requêtes des utilisateurs aux vues appropriées. En définissant des schémas d’URL qui correspondent à des vues spécifiques, Django permet de s’assurer que votre site reste organisé et évolutif.
Utilisation de templates d’URL avec la fonction reverse
de Django
La fonction reverse
de Django vous permet de générer des URL en fonction de leurs schémas d’URL nommés. Elle prend le nom du schéma d’URL comme premier argument avant les autres arguments requis et renvoie l’URL correspondante.
En voici un exemple concret :
# views.py from django.shortcuts import render from django.urls import reverse def blog_post_detail(request, year, month, slug): # ... url = reverse('blog_post_detail', args=[year, month, slug]) return render(request, 'blog/post_detail.html', {'url': url})
La fonction reverse permet de générer l’URL du schéma d’URL ‘blog_post_detail’
en transférant l’année, le mois et les valeurs slug comme arguments.
Vous pouvez ensuite utiliser l’URL renvoyée dans des templates ou d’autres parties de l’application.
Utilisation des balises d’URL dans les templates Django
La balise de template {% url %}
de Django fournit une solution élégante permettant de générer des URL directement dans votre template. Au lieu de coder les URL en dur, vous pouvez faire référence à des schémas d’URL nommés, ce qui rend vos templates plus flexibles et simples à gérer.
Voici un exemple :
En savoir plus
Dans ce cas, la balise {% url %}
crée une URL pour la vue blog_post_detail
, tout en transférant les paramètres year
, month
et slug
. Il est important de s’assurer que ces arguments correspondent au schéma d’URL défini dans votre fichier urls.py, ce qui doit prendre la forme suivante :
path('blog////', views.blog_post_detail, name='blog_post_detail'),
Cette approche permet de conserver des templates nets et adaptables, notamment lorsque votre projet évolue.
Templates Jinja et Django
Django est fourni avec un moteur de template intégré (DTL), mais les développeurs ont aussi la possibilité d’utiliser d’autres options, telles que Jinja.
Jinja est un moteur de template populaire, moderne et riche en fonctionnalités pour Python. Développé à l’origine pour le framework web Flask, il est également compatible avec Django.
Ce moteur a été conçu pour être rapide, sécurisé et hautement extensible. Ses fonctionnalités et capacités riches en font un outil polyvalent pour le rendu de contenus dynamiques.
Fonctionnalités et avantages clés de Jinja par rapport au DTL de Django :
- Syntaxe plus concise et intuitive.
- Exécution en sandbox pour plus de protection contre les attaques par injection de code.
- Système d’héritage plus puissant et flexible.
- Outils de débogage et mécanismes de rapport plus performants.
- Performances plus rapides lors de la manipulation de templates complexes ou de grands jeux de données.
- Fonctionnalité améliorée avec des filtres et des macros intégrés, ce qui permet de bénéficier d’une logique de rendu plus complexe qui n’encombre pas le template.
PyCharm peut détecter automatiquement le type de fichier *.jinja et mettre les éléments de syntaxe en évidence, assurer la saisie semi-automatique du code et la détection d’erreur, ainsi que la prise en charge des filtres et des extensions personnalisés, afin d’assurer une expérience de développement fluide.
Malgré ces avantages, il est également important de rappeler que l’intégration de Jinja dans un projet Django implique une configuration plus complexe et étendue.
Certains développeurs peuvent également préférer le moteur de template intégré de Django pour ne pas quitter l’écosystème Django.
Codage plus rapide avec les live templates Django
La fonctionnalité live template de PyCharm permet d’insérer rapidement les extraits de code les plus utilisés avec un simple raccourci clavier.
Pour appeler les live templates, il suffit d’appuyer sur ⌘J, en tapant ListView
, puis en appuyant sur la touche de tabulation.
Cela réduit le codage standard, accélère le développement et garantit une syntaxe cohérente. Vous pouvez également personnaliser ou créer vos propres templates en fonction des besoins propres à votre projet. Cette fonctionnalité est particulièrement utile pour la syntaxe DTL, où les boucles, les conditions et les structures de bloc sont fréquemment répétées.
Utilisation des templates Django : bonnes pratiques et conseils
L’utilisation des templates Django constitue un excellent moyen de gérer la couche de présentation de vos applications web.
Cependant, il est essentiel de suivre les instructions et d’appliquer les optimisations de performances pour s’assurer que vos templates sont bien gérés, sécurisés et systématiques.
Voici un résumé des bonnes pratiques et des conseils à prendre en compte pour les templates Django :
- Séparer la présentation de la logique métier. Veillez à ce que les templates servent exclusivement à effectuer le rendu des données et réaliser le traitement complexe dans les vues et les modèles.
- Organiser vos templates logiquement. Appliquez la structure de fichiers de Django en séparant les templates en fonction des applications et des fonctionnalités, en utilisant des sous-répertoires en fonction des besoins.
- Utiliser les conventions d’appellation de Django. Django applique le principe de la « convention primant sur la configuration », ce qui vous permet de nommer vos templates de façon spécifique pour ne pas fournir votre nom de template explicitement. Par exemple, lors de l’utilisation de vues basées sur les classes comme
ListView
, Django recherche automatiquement un template appelé /_list.html, ce qui simplifie votre code. - Diviser les tâches élaborées en composants réutilisables. Incitez la réutilisation du code et améliorez sa maintenabilité en utilisant des balises de template, des filtres et des inclusions.
- Appliquez des conventions de nommage cohérentes. Utilisez des noms clairs et descriptifs pour vos templates, balises et filtres. Cela facilite la lecture de votre code par les autres développeurs.
- Utilisez les filtres de rendu sûr de Django. Appliquez systématiquement une séquence d’échappement aux données fournies par l’utilisateur avant le rendu pour éviter les vulnérabilités XSS.
- Documentez la logique complexe de template. Utilisez des commentaires clairs pour expliquer les parties plus complexes de vos templates. Cela aidera les autres personnes (et vous-même à l’avenir) à comprendre votre code.
- Profilez vos templates. Utilisez les outils de profilage de Django pour identifier et optimiser les goulots d’étranglement des performances, tels que des boucles inefficaces et une logique trop complexe.
Regardez cette vidéo pour explorer les conseils de Django et les fonctionnalités de PyCharm en détail.
Conclusion
Qu’il s’agisse de créer un site web simple ou une application plus complexe, vous devez désormais savoir comment créer des templates Django qui enrichissent l’expérience utilisateur et simplifient votre processus de développement.
Toutefois, les templates ne constituent qu’un seul composant du framework Django. Explorez nos autres articles de blog consacrés à Django et les ressources qui peuvent vous aider à apprendre Django, découvrir les dernières fonctionnalités de Django, et bien plus encore. Vous pouvez également vous familiariser avec la documentation officielle de Django.
Prise en charge fiable de Django dans PyCharm
Des débutants complets aux développeurs expérimentés, PyCharm Professional est à votre disposition pour simplifier le workflow de développement de Django.
L’IDE Django assure une assistance au codage propre à Django, le débogage, les aperçus en direct, la navigation à l’échelle du projet et les fonctions de refactorisation. PyCharm inclut la prise en charge complète des templates Django, ce qui vous permet de les gérer et de les modifier facilement. Vous pouvez également vous connecter à votre base de données en un clic et travailler de façon fluide avec TypeScript, JavaScript et autres frameworks frontend.
Pour plus de détails sur la façon d’utiliser les templates Django dans PyCharm, consultez notre documentation. J’invite les personnes qui découvrent le framework Django à lire au préalable notre tutoriel complet qui couvre toutes les étapes du processus de création d’une application Django dans PyCharm.
Envie d’essayer ? Téléchargez PyCharm et profitez d’un processus de développement plus productif.