{"title":"Surcharge des gabarits","version":"4.2","locale":"fr","docname":"howto/overriding-templates","url":"/fr/4.2/howto/overriding-templates/","canonical":"https://djangodocs.dev/fr/4.2/howto/overriding-templates/","summary":"Dans votre projet, vous pourriez vouloir surcharger un gabarit d’une autre application Django, que ce soit une application tierce ou une application « contrib »…","html":"<h1>Surcharge des gabarits<a class=\"heading-anchor\" href=\"#how-to-override-templates\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Dans votre projet, vous pourriez vouloir surcharger un gabarit d’une autre application Django, que ce soit une application tierce ou une application « contrib » telle que <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.admin</span></code>. Vous pouvez soit placer les gabarits surchargés dans le répertoire des gabarits de votre projet, ou les placer dans le répertoire de gabarits d’une application.</p>\n<p>Si vous avez à la fois des gabarits surchargés dans les répertoires du projet et d’une application, le chargeur de gabarits par défaut de Django va essayer de charger le gabarit en commençant par le répertoire du projet. En d’autres termes, la recherche dans <a class=\"reference internal\" href=\"/fr/4.2/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DIRS</span></code></a> est prioritaire par rapport à <a class=\"reference internal\" href=\"/fr/4.2/ref/settings/#std-setting-TEMPLATES-APP_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APP_DIRS</span></code></a>.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Voir aussi</p>\n<p>Lisez <a class=\"reference internal\" href=\"/fr/4.2/ref/forms/renderers/#overriding-built-in-widget-templates\"><span class=\"std std-ref\">Redéfinition des gabarits des composants intégrés</span></a> si vous cherchez à faire cela.</p>\n</aside>\n<section id=\"overriding-from-the-project-s-templates-directory\">\n<h2>Surcharge à partir du répertoire des gabarits du projet<a class=\"heading-anchor\" href=\"#overriding-from-the-project-s-templates-directory\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Tout d’abord, nous allons examiner la surcharge des gabarits en créant les gabarits à remplacer dans le répertoire des gabarits de votre projet.</p>\n<p>Admettons que vous essayiez de surcharger les gabarits d’une application tierce appelée <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span></code>, qui fournit les gabarits <code class=\"docutils literal notranslate\"><span class=\"pre\">blog/post.html</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">blog/list.html</span></code>. Les réglages appropriés du projet ressembleraient à</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">pathlib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Path</span>\n\n<span class=\"n\">BASE_DIR</span> <span class=\"o\">=</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"vm\">__file__</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">resolve</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">parent</span><span class=\"o\">.</span><span class=\"n\">parent</span>\n\n<span class=\"n\">INSTALLED_APPS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;blog&quot;</span><span class=\"p\">,</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n\n<span class=\"n\">TEMPLATES</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.template.backends.django.DjangoTemplates&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;DIRS&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"n\">BASE_DIR</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;templates&quot;</span><span class=\"p\">],</span>\n        <span class=\"s2\">&quot;APP_DIRS&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"c1\"># ...</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Le réglage <a class=\"reference internal\" href=\"/fr/4.2/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a> et <code class=\"docutils literal notranslate\"><span class=\"pre\">BASE_DIR</span></code> existent déjà si vous avez créé votre projet à partir du modèle de projet par défaut. Le réglage devant être modifié est <a class=\"reference internal\" href=\"/fr/4.2/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DIRS</span></code></a>.</p>\n<p>Ces réglages supposent qu’un répertoire <code class=\"docutils literal notranslate\"><span class=\"pre\">templates</span></code> se trouve à la racine du projet. Pour surcharger les gabarits de l’application <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span></code>, créez un dossier dans le répertoire <code class=\"docutils literal notranslate\"><span class=\"pre\">templates</span></code> et ajoutez les fichiers de gabarit dans ce dossier :</p>\n<div class=\"code-block\" data-language=\"none\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">None</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"None code\"><code>templates/\n    blog/\n        list.html\n        post.html\n</code></pre></div>\n<p>Le chargeur de gabarits cherche d’abord les gabarits dans le répertoire <code class=\"docutils literal notranslate\"><span class=\"pre\">DIRS</span></code>. Lorsque les vues de l’application <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span></code> demanderont les gabarits <code class=\"docutils literal notranslate\"><span class=\"pre\">blog/post.html</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">blog/list.html</span></code>, le chargeur renverra les fichiers que vous venez de créer.</p>\n</section>\n<section id=\"overriding-from-an-app-s-template-directory\">\n<h2>Surcharge à partir du répertoire des gabarits d’une application<a class=\"heading-anchor\" href=\"#overriding-from-an-app-s-template-directory\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Comme vous surchargez des gabarits situés en dehors des applications de votre projet, il est plus courant d’utiliser la première méthode et de placer les gabarits à surcharger dans le dossier des gabarits du projet. Cependant, si vous préférez placer ces gabarits dans le répertoire des gabarits d’une application, c’est aussi possible.</p>\n<p>Commencez par vous assurer que les réglages des gabarits sont configurés pour rechercher dans les répertoires des applications</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">TEMPLATES</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"c1\"># ...</span>\n        <span class=\"s2\">&quot;APP_DIRS&quot;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"c1\"># ...</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Si vous souhaitez placer les gabarits surchargés dans une application nommée <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp</span></code> et que les gabarits à surcharger sont nommés <code class=\"docutils literal notranslate\"><span class=\"pre\">blog/list.html</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">blog/post.html</span></code>, votre structure de répertoires ressemblera à :</p>\n<div class=\"code-block\" data-language=\"none\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">None</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"None code\"><code>myapp/\n    templates/\n        blog/\n            list.html\n            post.html\n</code></pre></div>\n<p>Lorsque <a class=\"reference internal\" href=\"/fr/4.2/ref/settings/#std-setting-TEMPLATES-APP_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APP_DIRS</span></code></a> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, le chargeur de gabarits recherche dans les répertoires de gabarits des applications et va donc trouver ces gabarits.</p>\n</section>\n<section id=\"extending-an-overridden-template\">\n<span id=\"id1\"></span><h2>Extension d’un gabarit surchargé<a class=\"heading-anchor\" href=\"#extending-an-overridden-template\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Lorsque les chargeurs de gabarits sont configurés, vous pouvez étendre un gabarit en utilisant la balise de gabarit <a class=\"reference internal\" href=\"/fr/4.2/ref/templates/builtins/#std-templatetag-extends\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">extends</span> <span class=\"pre\">%}</span></code></a> tout en le surchargeant en même temps. Cela peut vous permettre de faire de petites personnalisations sans avoir besoin de réécrire le gabarit en entier.</p>\n<p>Par exemple, vous pouvez utiliser cette technique pour ajouter un logo personnalisé au gabarit <code class=\"docutils literal notranslate\"><span class=\"pre\">admin/base_site.html</span></code>:</p>\n<blockquote>\n<div><figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">templates/admin/base_site.html</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code> <span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s2\">&quot;admin/base_site.html&quot;</span> <span class=\"cp\">%}</span>\n\n <span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">branding</span> <span class=\"cp\">%}</span>\n     <span class=\"p\">&lt;</span><span class=\"nt\">img</span> <span class=\"na\">src</span><span class=\"o\">=</span><span class=\"s\">&quot;link/to/logo.png&quot;</span> <span class=\"na\">alt</span><span class=\"o\">=</span><span class=\"s\">&quot;logo&quot;</span><span class=\"p\">&gt;</span>\n     <span class=\"cp\">{{</span> <span class=\"nb\">block</span><span class=\"nv\">.super</span> <span class=\"cp\">}}</span>\n <span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></figure>\n</div></blockquote>\n<p>Points clés à relever :</p>\n<ul class=\"simple\">\n<li><p>L’exemple crée un fichier <code class=\"docutils literal notranslate\"><span class=\"pre\">templates/admin/base_site.html</span></code> qui utilise le répertoire <code class=\"docutils literal notranslate\"><span class=\"pre\">templates</span></code> configuré dans le projet afin de surcharger <code class=\"docutils literal notranslate\"><span class=\"pre\">admin/base_site.html</span></code>.</p></li>\n<li><p>Le nouveau gabarit étend <code class=\"docutils literal notranslate\"><span class=\"pre\">admin/base_site.html</span></code>, qui est le même gabarit que celui qui est surchargé.</p></li>\n<li><p>Le gabarit ne fait que remplacer le bloc <code class=\"docutils literal notranslate\"><span class=\"pre\">branding</span></code>, ajoutant un logo personnalisé et utilisant <code class=\"docutils literal notranslate\"><span class=\"pre\">block.super</span></code> pour appeler le contenu d’origine.</p></li>\n<li><p>Le reste du gabarit est hérité tel quel de <code class=\"docutils literal notranslate\"><span class=\"pre\">admin/base_site.html</span></code>.</p></li>\n</ul>\n<p>Cette technique fonctionne car le chargeur de gabarits ne considère pas le gabrit surchargé déjà chargé (à <code class=\"docutils literal notranslate\"><span class=\"pre\">templates/admin/base_site.html</span></code>) lorsqu’il résoud la balise <code class=\"docutils literal notranslate\"><span class=\"pre\">extends</span></code>. Combiné à <code class=\"docutils literal notranslate\"><span class=\"pre\">block.super</span></code>, c’est une technique puissante pour appliquer de petits ajustements.</p>\n</section>","rootId":"how-to-override-templates","toc":[{"title":"Surcharge à partir du répertoire des gabarits du projet","anchor":"overriding-from-the-project-s-templates-directory","children":[]},{"title":"Surcharge à partir du répertoire des gabarits d’une application","anchor":"overriding-from-an-app-s-template-directory","children":[]},{"title":"Extension d’un gabarit surchargé","anchor":"extending-an-overridden-template","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"Guides pratiques","url":"/fr/4.2/howto/"}],"prev":{"docname":"howto/outputting-pdf","title":"Création de fichiers PDF","url":"/fr/4.2/howto/outputting-pdf/"},"next":{"docname":"howto/static-files/index","title":"Gestion des fichiers statiques (par ex. images, JavaScript, CSS)","url":"/fr/4.2/howto/static-files/"},"formats":{"html":"/fr/4.2/howto/overriding-templates/","markdown":"/fr/4.2/howto/overriding-templates.md","json":"/fr/4.2/howto/overriding-templates.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/howto/overriding-templates.txt","official":"https://docs.djangoproject.com/fr/4.2/howto/overriding-templates/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}