{"title":"L’API du rendu des formulaires","version":"4.2","locale":"fr","docname":"ref/forms/renderers","url":"/fr/4.2/ref/forms/renderers/","canonical":"https://djangodocs.dev/fr/4.2/ref/forms/renderers/","summary":"Les composants de formulaires de Django sont produits en utilisant le système des moteurs de gabarit de Django. Le processus de production des formulaires peut être…","html":"<span id=\"the-form-rendering-api\"></span><h1>L’API du rendu des formulaires<a class=\"heading-anchor\" href=\"#module-django.forms.renderers\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Les composants de formulaires de Django sont produits en utilisant le <a class=\"reference internal\" href=\"/fr/4.2/topics/templates/\"><span class=\"doc\">système des moteurs de gabarit</span></a> de Django.</p>\n<p>Le processus de production des formulaires peut être personnalisé à plusieurs niveaux :</p>\n<ul class=\"simple\">\n<li><p>Les composants peuvent indiquer des noms de gabarit personnalisés.</p></li>\n<li><p>Les formulaires et les composants peuvent indiquer des classes de moteur de rendu personnalisées.</p></li>\n<li><p>Un gabarit de composant peut être surchargé par projet (les applications réutilisables ne devraient typiquement pas surcharger les gabarits de base car cela pourrait générer des conflits avec les gabarits personnalisés d’un projet.)</p></li>\n</ul>\n<section id=\"the-low-level-render-api\">\n<span id=\"low-level-widget-render-api\"></span><h2>L’API de rendu de bas niveau<a class=\"heading-anchor\" href=\"#the-low-level-render-api\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Le processus de rendu des gabarits de formulaires est contrôlé par une classe de rendu personnalisable. Cette classe peut être indiquée en définissant le réglage <a class=\"reference internal\" href=\"/fr/4.2/ref/settings/#std-setting-FORM_RENDERER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FORM_RENDERER</span></code></a>. Par défaut, il contient <code class=\"docutils literal notranslate\"><span class=\"pre\">'</span></code><a class=\"reference internal\" href=\"#django.forms.renderers.DjangoTemplates\" title=\"django.forms.renderers.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.forms.renderers.DjangoTemplates</span></code></a><code class=\"docutils literal notranslate\"><span class=\"pre\">'</span></code>.</p>\n<p>En indiquant une classe de rendu de formulaire personnalisée et en surchargeant <a class=\"reference internal\" href=\"#django.forms.renderers.BaseRenderer.form_template_name\" title=\"django.forms.renderers.BaseRenderer.form_template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">form_template_name</span></code></a>, vous pouvez ajuster le balisage par défaut des formulaires dans tout votre projet depuis un seul endroit.</p>\n<p>Il est aussi possible de définir un moteur de rendu personnalisé par formulaire ou par composant en définissant l’attribut <a class=\"reference internal\" href=\"/fr/4.2/ref/forms/api/#django.forms.Form.default_renderer\" title=\"django.forms.Form.default_renderer\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Form.default_renderer</span></code></a> ou en utilisant le paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">renderer</span></code> de <a class=\"reference internal\" href=\"/fr/4.2/ref/forms/api/#django.forms.Form.render\" title=\"django.forms.Form.render\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Form.render()</span></code></a> ou de <a class=\"reference internal\" href=\"/fr/4.2/ref/forms/widgets/#django.forms.Widget.render\" title=\"django.forms.Widget.render\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Widget.render()</span></code></a>.</p>\n<p>Ce principe de personnalisation s’applique aussi au rendu des jeux de formulaire. Voir <a class=\"reference internal\" href=\"/fr/4.2/topics/forms/formsets/#formset-rendering\"><span class=\"std std-ref\">Utilisation des formulaires groupés dans les vues et les gabarits</span></a> pour plus de détails à ce sujet.</p>\n<p>Utilisez l’une des <a class=\"reference internal\" href=\"#built-in-template-form-renderers\"><span class=\"std std-ref\">moteurs de rendu de gabarits de formulaire intégrés</span></a> ou implémentez le votre. Les moteurs de rendu personnalisés doivent implémenter une méthode <code class=\"docutils literal notranslate\"><span class=\"pre\">render(nom_gabarit,</span> <span class=\"pre\">context,</span> <span class=\"pre\">request=None)</span></code>. Elle doit renvoyer un gabarit finalisé (sous forme de chaîne) ou générer <a class=\"reference internal\" href=\"/fr/4.2/topics/templates/#django.template.TemplateDoesNotExist\" title=\"django.template.TemplateDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">TemplateDoesNotExist</span></code></a>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.BaseRenderer\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">BaseRenderer</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.BaseRenderer\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>La classe de base pour les moteurs de rendu intégrés.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.BaseRenderer.form_template_name\">\n<span class=\"sig-name descname\"><span class=\"pre\">form_template_name</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.BaseRenderer.form_template_name\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"4.1\">\n<p class=\"version-note-title\">New in Django 4.1</p></aside>\n<p>Le nom de gabarit par défaut à utiliser pour produire un formulaire.</p>\n<p>Vaut par défaut <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/default.html&quot;</span></code>, qui est un pointeur vers <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/table.html&quot;</span></code>.</p>\n<aside class=\"version-note version-deprecated\" data-version=\"4.1\">\n<p class=\"version-note-title\">Deprecated since Django 4.1</p><p><span class=\"versionmodified deprecated\">Obsolète depuis la version 4.1.</span></p>\n</aside>\n<p>Le gabarit <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/default.html&quot;</span></code> est obsolète et sera supprimé dans Django 5.0. La valeur par défaut deviendra <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/div.html&quot;</span></code> à partir de ce moment.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.BaseRenderer.formset_template_name\">\n<span class=\"sig-name descname\"><span class=\"pre\">formset_template_name</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.BaseRenderer.formset_template_name\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"4.1\">\n<p class=\"version-note-title\">New in Django 4.1</p></aside>\n<p>Le nom de gabarit par défaut à utiliser pour produire un jeu de formulaires.</p>\n<p>Vaut par défaut <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/formsets/default.html&quot;</span></code>, qui est un pointeur vers <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/formsets/table.html&quot;</span></code>.</p>\n<aside class=\"version-note version-deprecated\" data-version=\"4.1\">\n<p class=\"version-note-title\">Deprecated since Django 4.1</p><p><span class=\"versionmodified deprecated\">Obsolète depuis la version 4.1.</span></p>\n</aside>\n<p>Le gabarit <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/formset/default.html&quot;</span></code> est obsolète et sera supprimé dans Django 5.0. La valeur par défaut deviendra <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/formset/div.html&quot;</span></code> à partir de ce moment.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.BaseRenderer.get_template\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_template</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.renderers.BaseRenderer.get_template\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Les sous-classes doivent implémenter cette méthode avec la logique de recherche de gabarits appropriée.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.BaseRenderer.render\">\n<span class=\"sig-name descname\"><span class=\"pre\">render</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">context</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.renderers.BaseRenderer.render\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Produit le gabarit donné ou génère <a class=\"reference internal\" href=\"/fr/4.2/topics/templates/#django.template.TemplateDoesNotExist\" title=\"django.template.TemplateDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">TemplateDoesNotExist</span></code></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"built-in-template-form-renderers\">\n<span id=\"id1\"></span><h2>Moteurs de rendu de gabarits de formulaire intégrés<a class=\"heading-anchor\" href=\"#built-in-template-form-renderers\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"djangotemplates\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code><a class=\"heading-anchor\" href=\"#djangotemplates\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.DjangoTemplates\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">DjangoTemplates</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.DjangoTemplates\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ce moteur de rendu utilise un moteur indépendant <a class=\"reference internal\" href=\"/fr/4.2/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code></a> (sans rapport avec ce que vous pourriez avoit configuré dans 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>). Il charge les gabarits en regardant d’abord dans le répertoire des gabarits de formulaire intégrés dans <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/4.2.x/django/forms/templates\">django/forms/templates</a>, puis dans les répertoires de gabarits des applications installées en utilisant le chargeur <a class=\"reference internal\" href=\"/fr/4.2/ref/templates/api/#django.template.loaders.app_directories.Loader\" title=\"django.template.loaders.app_directories.Loader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">app_directories</span></code></a>.</p>\n<p>Si vous souhaitez produire des gabarits avec des personnalisations provenant de votre 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>, comme par exemple en exploitant des processeurs de contexte, utilisez le moteur de rendu <a class=\"reference internal\" href=\"#django.forms.renderers.TemplatesSetting\" title=\"django.forms.renderers.TemplatesSetting\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplatesSetting</span></code></a>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.DjangoDivFormRenderer\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">DjangoDivFormRenderer</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.DjangoDivFormRenderer\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-added\" data-version=\"4.1\">\n<p class=\"version-note-title\">New in Django 4.1</p></aside>\n<p>Sous-classe de <a class=\"reference internal\" href=\"#django.forms.renderers.DjangoTemplates\" title=\"django.forms.renderers.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code></a> définissant les attributs  <a class=\"reference internal\" href=\"#django.forms.renderers.BaseRenderer.form_template_name\" title=\"django.forms.renderers.BaseRenderer.form_template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">form_template_name</span></code></a> et <a class=\"reference internal\" href=\"#django.forms.renderers.BaseRenderer.formset_template_name\" title=\"django.forms.renderers.BaseRenderer.formset_template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">formset_template_name</span></code></a> respectivement par <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/div.html&quot;</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/formset/div.html&quot;</span></code>.</p>\n<p>Cette classe de moteur de rendu est provisoire et permet d’opter pour les nouveaux gabarits basés sur la balise <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;div&gt;</span></code>, ce qui deviendra le comportement par défaut à partir de Django 5.0.</p>\n<p>Vous pouvez l’utiliser en définissant le réglage <a class=\"reference internal\" href=\"/fr/4.2/ref/settings/#std-setting-FORM_RENDERER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FORM_RENDERER</span></code></a>:</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\">FORM_RENDERER</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;django.forms.renderers.DjangoDivFormRenderer&quot;</span>\n</code></pre></div>\n<p>Dès que les gabarits <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;div&gt;</span></code> seront utilisés par défaut, cette classe de transition sera rendue obsolètem, puis supprimée dans Django 6.0. La déclaration <code class=\"docutils literal notranslate\"><span class=\"pre\">FORM_RENDERER</span></code> pourra alors être supprimée également.</p>\n</section>\n<section id=\"jinja2\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">Jinja2</span></code><a class=\"heading-anchor\" href=\"#jinja2\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.Jinja2\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Jinja2</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.Jinja2\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ce moteur de rendu est semblable au moteur <a class=\"reference internal\" href=\"#django.forms.renderers.DjangoTemplates\" title=\"django.forms.renderers.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code></a>, sauf qu’il utilise le moteur <a class=\"reference internal\" href=\"/fr/4.2/topics/templates/#django.template.backends.jinja2.Jinja2\" title=\"django.template.backends.jinja2.Jinja2\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Jinja2</span></code></a>. Les gabarits des composants intégrés se trouvent dans <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/4.2.x/django/forms/jinja2\">django/forms/jinja2</a> et les applications installées peuvent fournir des gabarits dans un répertoire <code class=\"docutils literal notranslate\"><span class=\"pre\">jinja2</span></code>.</p>\n<p>Pour utiliser ce moteur, tous les formulaires et composants de votre projet et ses applications tierces doivent posséder des gabarits Jinja2. Si vous ne fournissez pas vous-même des gabarits pour les composants qui n’ont en pas, vous ne pouvez pas utiliser ce moteur de rendu. Par exemple, <a class=\"reference internal\" href=\"/fr/4.2/ref/contrib/admin/#module-django.contrib.admin\" title=\"django.contrib.admin: Django's admin site.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.admin</span></code></a> ne contient pas de gabarits Jinja2 pour ses composants car ceux-ci font usage des balises de gabarits Django.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.Jinja2DivFormRenderer\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Jinja2DivFormRenderer</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.Jinja2DivFormRenderer\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-added\" data-version=\"4.1\">\n<p class=\"version-note-title\">New in Django 4.1</p></aside>\n<p>Une classe de moteur de rendu transitoire, comme pour <a class=\"reference internal\" href=\"#django.forms.renderers.DjangoDivFormRenderer\" title=\"django.forms.renderers.DjangoDivFormRenderer\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DjangoDivFormRenderer</span></code></a> ci-dessus, mais comme sous-classe de <a class=\"reference internal\" href=\"#django.forms.renderers.Jinja2\" title=\"django.forms.renderers.Jinja2\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Jinja2</span></code></a> pour être utilisée avec le moteur Jinja2.</p>\n<p>Vous pouvez l’utiliser en définissant le réglage <a class=\"reference internal\" href=\"/fr/4.2/ref/settings/#std-setting-FORM_RENDERER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FORM_RENDERER</span></code></a>:</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\">FORM_RENDERER</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;django.forms.renderers.Jinja2DivFormRenderer&quot;</span>\n</code></pre></div>\n</section>\n<section id=\"templatessetting\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">TemplatesSetting</span></code><a class=\"heading-anchor\" href=\"#templatessetting\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.TemplatesSetting\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">TemplatesSetting</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.TemplatesSetting\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ce moteur de rendu donne un contrôle complet sur la façon dont les gabarits de formulaires et de composants sont traités. Il utilise <a class=\"reference internal\" href=\"/fr/4.2/topics/templates/#django.template.loader.get_template\" title=\"django.template.loader.get_template\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">get_template()</span></code></a> pour trouver les gabarits sur la base de ce qui est configuré dans 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>.</p>\n<p>L’emploi de ce moteur de rendu en même temps que les gabarits intégrés nécessite l’une des deux conditions suivantes :</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'django.forms'</span></code> se trouve dans <a class=\"reference internal\" href=\"/fr/4.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> et au moins un moteur avec <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=True</span></code></a>.</p></li>\n<li><p>Le répertoire des gabarits intégrés doit figurer dans le réglage <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> d’au moins un des moteurs de gabarits. Pour générer ce chemin</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\">import</span><span class=\"w\"> </span><span class=\"nn\">django</span>\n\n<span class=\"n\">django</span><span class=\"o\">.</span><span class=\"n\">__path__</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;/forms/templates&quot;</span>  <span class=\"c1\"># or &#39;/forms/jinja2&#39;</span>\n</code></pre></div>\n</li>\n</ul>\n<p>L’emploi de ce moteur de rendu nécessite que les gabarits de formulaires dont le projet a besoin puissent être localisés.</p>\n</section>\n</section>\n<section id=\"context-available-in-formset-templates\">\n<h2>Contexte disponible dans les gabarits des jeux de formulaires<a class=\"heading-anchor\" href=\"#context-available-in-formset-templates\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les gabarits des jeux de formulaires reçoivent un contexte de <a class=\"reference internal\" href=\"/fr/4.2/topics/forms/formsets/#django.forms.formsets.BaseFormSet.get_context\" title=\"django.forms.formsets.BaseFormSet.get_context\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">BaseFormSet.get_context()</span></code></a>. Par défaut, les jeux de formulaires reçoivent un dictionnaire avec les valeurs suivantes :</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">formset</span></code>: l’instance du jeu de formulaires.</p></li>\n</ul>\n</section>\n<section id=\"context-available-in-form-templates\">\n<h2>Contexte disponible dans les gabarits des formulaires<a class=\"heading-anchor\" href=\"#context-available-in-form-templates\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les gabarits des formulaires reçoivent un contexte de <a class=\"reference internal\" href=\"/fr/4.2/ref/forms/api/#django.forms.Form.get_context\" title=\"django.forms.Form.get_context\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Form.get_context()</span></code></a>. Par défaut, les formulaires reçoivent un dictionnaire avec les valeurs suivantes :</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code>: le formulaire lié.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code>: tous les champs liés, exceptés les champs cachés.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">hidden_fields</span></code>: tous les champs liés cachés.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">errors</span></code>: toutes les erreurs de formulaire non liées aux champs ou liées à des champs cachés.</p></li>\n</ul>\n</section>\n<section id=\"context-available-in-widget-templates\">\n<h2>Contexte disponible dans les gabarits de composants<a class=\"heading-anchor\" href=\"#context-available-in-widget-templates\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les gabarits de composants reçoivent un contexte provenant de <a class=\"reference internal\" href=\"/fr/4.2/ref/forms/widgets/#django.forms.Widget.get_context\" title=\"django.forms.Widget.get_context\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Widget.get_context()</span></code></a>. Par défaut, les composants reçoivent une seule valeur dans le contexte, <code class=\"docutils literal notranslate\"><span class=\"pre\">widget</span></code>. Il s’agit d’un dictionnaire qui contient des valeurs comme :</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">valeur</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">attrs</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">is_hidden</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code></p></li>\n</ul>\n<p>Certains composants ajoutent d’autres informations dans le contexte. Par exemple, tous les composants héritant de <code class=\"docutils literal notranslate\"><span class=\"pre\">Input</span></code> définissent <code class=\"docutils literal notranslate\"><span class=\"pre\">widget['type']</span></code> et <a class=\"reference internal\" href=\"/fr/4.2/ref/forms/widgets/#django.forms.MultiWidget\" title=\"django.forms.MultiWidget\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultiWidget</span></code></a> définit <code class=\"docutils literal notranslate\"><span class=\"pre\">widget['subwidgets']</span></code> donnant la possibilité de faire des boucles.</p>\n</section>\n<section id=\"overriding-built-in-formset-templates\">\n<span id=\"id2\"></span><h2>Redéfinition des gabarits de jeux de formulaires intégrés<a class=\"heading-anchor\" href=\"#overriding-built-in-formset-templates\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/fr/4.2/topics/forms/formsets/#django.forms.formsets.BaseFormSet.template_name\" title=\"django.forms.formsets.BaseFormSet.template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">BaseFormSet.template_name</span></code></a></p>\n<p>Pour surcharger les gabarits des jeux de formulaires, vous devez utiliser le moteur de rendu <a class=\"reference internal\" href=\"#django.forms.renderers.TemplatesSetting\" title=\"django.forms.renderers.TemplatesSetting\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplatesSetting</span></code></a>. Puis, le remplacement des gabarits de jeux de formulaires fonctionne <a class=\"reference internal\" href=\"/fr/4.2/howto/overriding-templates/\"><span class=\"doc\">de la même manière</span></a> que le remplacement de n’importe quel autre gabarit d’un projet.</p>\n</section>\n<section id=\"overriding-built-in-form-templates\">\n<span id=\"id3\"></span><h2>Redéfinition des gabarits de formulaires intégrés<a class=\"heading-anchor\" href=\"#overriding-built-in-form-templates\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/fr/4.2/ref/forms/api/#django.forms.Form.template_name\" title=\"django.forms.Form.template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Form.template_name</span></code></a></p>\n<p>Pour surcharger les gabarits des formulaires, vous devez utiliser le moteur de rendu <a class=\"reference internal\" href=\"#django.forms.renderers.TemplatesSetting\" title=\"django.forms.renderers.TemplatesSetting\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplatesSetting</span></code></a>. Puis, le remplacement des gabarits de formulaires fonctionne <a class=\"reference internal\" href=\"/fr/4.2/howto/overriding-templates/\"><span class=\"doc\">de la même manière</span></a> que le remplacement de n’importe quel autre gabarit d’un projet.</p>\n</section>\n<section id=\"overriding-built-in-widget-templates\">\n<span id=\"id4\"></span><h2>Redéfinition des gabarits des composants intégrés<a class=\"heading-anchor\" href=\"#overriding-built-in-widget-templates\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Chaque composant possède un attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code> avec une valeur telle que <code class=\"docutils literal notranslate\"><span class=\"pre\">input.html</span></code>. Les gabarits des composants livrés avec Django sont stockés dans le chemin <code class=\"docutils literal notranslate\"><span class=\"pre\">django/forms/widgets</span></code>. Par exemple, vous pouvez fournir un gabarit personnalisé pour <code class=\"docutils literal notranslate\"><span class=\"pre\">input.html</span></code> en créant <code class=\"docutils literal notranslate\"><span class=\"pre\">django/forms/widgets/input.html</span></code>. Voir <a class=\"reference internal\" href=\"/fr/4.2/ref/forms/widgets/#built-in-widgets\"><span class=\"std std-ref\">Composants intégrés</span></a> pour connaître le nom du gabarit de chaque composant.</p>\n<p>Pour surcharger les gabarits de composants, vous devez utiliser le moteur de rendu <a class=\"reference internal\" href=\"#django.forms.renderers.TemplatesSetting\" title=\"django.forms.renderers.TemplatesSetting\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplatesSetting</span></code></a>. Puis, le remplacement des gabarits de composants fonctionne <a class=\"reference internal\" href=\"/fr/4.2/howto/overriding-templates/\"><span class=\"doc\">de la même manière</span></a> que le remplacement de n’importe quel autre gabarit d’un projet.</p>\n</section>","rootId":"module-django.forms.renderers","toc":[{"title":"L’API de rendu de bas niveau","anchor":"the-low-level-render-api","children":[]},{"title":"Moteurs de rendu de gabarits de formulaire intégrés","anchor":"built-in-template-form-renderers","children":[{"title":"DjangoTemplates","anchor":"djangotemplates","children":[]},{"title":"Jinja2","anchor":"jinja2","children":[]},{"title":"TemplatesSetting","anchor":"templatessetting","children":[]}]},{"title":"Contexte disponible dans les gabarits des jeux de formulaires","anchor":"context-available-in-formset-templates","children":[]},{"title":"Contexte disponible dans les gabarits des formulaires","anchor":"context-available-in-form-templates","children":[]},{"title":"Contexte disponible dans les gabarits de composants","anchor":"context-available-in-widget-templates","children":[]},{"title":"Redéfinition des gabarits de jeux de formulaires intégrés","anchor":"overriding-built-in-formset-templates","children":[]},{"title":"Redéfinition des gabarits de formulaires intégrés","anchor":"overriding-built-in-form-templates","children":[]},{"title":"Redéfinition des gabarits des composants intégrés","anchor":"overriding-built-in-widget-templates","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/4.2/ref/"},{"docname":"ref/forms/index","title":"Formulaires","url":"/fr/4.2/ref/forms/"}],"prev":{"docname":"ref/forms/formsets","title":"Fonctions de formulaires groupés","url":"/fr/4.2/ref/forms/formsets/"},"next":{"docname":"ref/forms/widgets","title":"Composants de formulaires (« widgets »)","url":"/fr/4.2/ref/forms/widgets/"},"formats":{"html":"/fr/4.2/ref/forms/renderers/","markdown":"/fr/4.2/ref/forms/renderers.md","json":"/fr/4.2/ref/forms/renderers.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/ref/forms/renderers.txt","official":"https://docs.djangoproject.com/fr/4.2/ref/forms/renderers/","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"]}