{"title":"Mise à jour des gabarits pour Django 1.8","version":"1.11","locale":"fr","docname":"ref/templates/upgrading","url":"/fr/1.11/ref/templates/upgrading/","canonical":"https://djangodocs.dev/fr/1.11/ref/templates/upgrading/","summary":"Le système des gabarits de Django a été retravaillé dans Django 1.8 afin de pouvoir accepter plusieurs moteurs de gabarit. Ce document complète les notes de…","html":"<h1>Mise à jour des gabarits pour Django 1.8<a class=\"heading-anchor\" href=\"#upgrading-templates-to-django-1-8\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Le système des gabarits de Django a été retravaillé dans Django 1.8 afin de pouvoir accepter plusieurs moteurs de gabarit. Ce document complète les <a class=\"reference internal\" href=\"/fr/1.11/releases/1.8/\"><span class=\"doc\">notes de publication</span></a> avec des instructions de mise à jour détaillées sur certains sujets.</p>\n<section id=\"the-templates-settings\">\n<h2>Les réglages <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a><a class=\"heading-anchor\" href=\"#the-templates-settings\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Un nouveau réglage a été introduit dans Django 1.8 : <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a>. Tous les réglages existants liés aux gabarits ont été rendus obsolètes.</p>\n<p>Durant la période d’obsolescence, Django crée un réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> rétrocompatible sur la base des réglages <code class=\"docutils literal notranslate\">TEMPLATE_*</code> si vous ne l’avez pas fait vous-même.</p>\n<p>Voici comment définir <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> dans votre module de réglages.</p>\n<p>Si vous utilisez la valeur par défaut de <code class=\"docutils literal notranslate\">TEMPLATE_LOADERS</code>, c’est-à-dire s’il n’est pas défini dans vos réglages ou qu’il est défini comme :</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=\"p\">[</span><span class=\"s1\">&#39;django.template.loaders.filesystem.Loader&#39;</span><span class=\"p\">,</span>\n <span class=\"s1\">&#39;django.template.loaders.app_directories.Loader&#39;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>voici alors comment définir <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</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>TEMPLATES <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;BACKEND&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;django.template.backends.django.DjangoTemplates&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;DIRS&#39;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n            <span class=\"c1\"># insert your TEMPLATE_DIRS here</span>\n        <span class=\"p\">],</span>\n        <span class=\"s1\">&#39;APP_DIRS&#39;</span><span class=\"p\">:</span> <span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;OPTIONS&#39;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;context_processors&#39;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n                <span class=\"c1\"># Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this</span>\n                <span class=\"c1\"># list if you haven&#39;t customized them:</span>\n                <span class=\"s1\">&#39;django.contrib.auth.context_processors.auth&#39;</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;django.template.context_processors.debug&#39;</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;django.template.context_processors.i18n&#39;</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;django.template.context_processors.media&#39;</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;django.template.context_processors.static&#39;</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;django.template.context_processors.tz&#39;</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;django.contrib.messages.context_processors.messages&#39;</span><span class=\"p\">,</span>\n            <span class=\"p\">],</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Si vous n’utilisez pas la valeur par défaut de <code class=\"docutils literal notranslate\">TEMPLATE_LOADERS</code>, voici comment vous devez définir <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</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>TEMPLATES <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;BACKEND&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;django.template.backends.django.DjangoTemplates&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;DIRS&#39;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n            <span class=\"c1\"># insert your TEMPLATE_DIRS here</span>\n        <span class=\"p\">],</span>\n        <span class=\"s1\">&#39;OPTIONS&#39;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;context_processors&#39;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n                <span class=\"c1\"># Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this</span>\n                <span class=\"c1\"># list if you haven&#39;t customized them:</span>\n                <span class=\"s1\">&#39;django.contrib.auth.context_processors.auth&#39;</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;django.template.context_processors.debug&#39;</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;django.template.context_processors.i18n&#39;</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;django.template.context_processors.media&#39;</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;django.template.context_processors.static&#39;</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;django.template.context_processors.tz&#39;</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;django.contrib.messages.context_processors.messages&#39;</span><span class=\"p\">,</span>\n            <span class=\"p\">],</span>\n            <span class=\"s1\">&#39;loaders&#39;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n                <span class=\"c1\"># insert your TEMPLATE_LOADERS here</span>\n            <span class=\"p\">]</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>De plus, vous devez remplacer <code class=\"docutils literal notranslate\">django.core.context_processors</code> par <code class=\"docutils literal notranslate\">django.template.context_processors</code> dans les noms des processeurs de contexte.</p>\n<p>Si votre module de réglages définit <code class=\"docutils literal notranslate\">ALLOWED_INCLUDE_ROOTS</code> ou <code class=\"docutils literal notranslate\">TEMPLATE_STRING_IF_INVALID</code>, incluez leur valeur dans les clés “allowed_include_roots”` et <code class=\"docutils literal notranslate\">'string_if_invalid'</code> du dictionnaire <code class=\"docutils literal notranslate\">'OPTIONS'</code>.</p>\n<p>Si le réglage <code class=\"docutils literal notranslate\">TEMPLATE_DEBUG</code> contient une valeur différente de <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a>, incluez sa valeur dans la clé <code class=\"docutils literal notranslate\">'debug'</code> du dictionnaire <code class=\"docutils literal notranslate\">'OPTIONS'</code>.</p>\n<p>Après avoir défini <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a>, vous pouvez sans problème supprimer <code class=\"docutils literal notranslate\">ALLOWED_INCLUDE_ROOTS</code>, <code class=\"docutils literal notranslate\">TEMPLATE_CONTEXT_PROCESSORS</code>, <code class=\"docutils literal notranslate\">TEMPLATE_DEBUG</code>, <code class=\"docutils literal notranslate\">TEMPLATE_DIRS</code>, <code class=\"docutils literal notranslate\">TEMPLATE_LOADERS</code> et <code class=\"docutils literal notranslate\">TEMPLATE_STRING_IF_INVALID</code>.</p>\n<p>Si vous surchargez certains de ces réglages dans des tests, il est nécessaire de surcharger maintenant la totalité de <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a>.</p>\n</section>\n<section id=\"django-template-loader\">\n<h2><a class=\"reference internal\" href=\"/fr/1.11/topics/templates/#module-django.template.loader\" title=\"django.template.loader\"><code class=\"xref py py-mod docutils literal notranslate\">django.template.loader</code></a><a class=\"heading-anchor\" href=\"#django-template-loader\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"get-template-and-select-template\">\n<span id=\"get-template-upgrade-django-18\"></span><h3><a class=\"reference internal\" href=\"/fr/1.11/topics/templates/#django.template.loader.get_template\" title=\"django.template.loader.get_template\"><code class=\"xref py py-func docutils literal notranslate\">get_template()</code></a> et <a class=\"reference internal\" href=\"/fr/1.11/topics/templates/#django.template.loader.select_template\" title=\"django.template.loader.select_template\"><code class=\"xref py py-func docutils literal notranslate\">select_template()</code></a><a class=\"heading-anchor\" href=\"#get-template-and-select-template\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Dans Django 1.8, <a class=\"reference internal\" href=\"/fr/1.11/topics/templates/#django.template.loader.get_template\" title=\"django.template.loader.get_template\"><code class=\"xref py py-func docutils literal notranslate\">get_template()</code></a> et <a class=\"reference internal\" href=\"/fr/1.11/topics/templates/#django.template.loader.select_template\" title=\"django.template.loader.select_template\"><code class=\"xref py py-func docutils literal notranslate\">select_template()</code></a> renvoient un objet <code class=\"docutils literal notranslate\">Template</code> dépendant du moteur au lieu de <a class=\"reference internal\" href=\"/fr/1.11/ref/templates/api/#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">django.template.Template</code></a>.</p>\n<p>Par exemple, si <a class=\"reference internal\" href=\"/fr/1.11/topics/templates/#django.template.loader.get_template\" title=\"django.template.loader.get_template\"><code class=\"xref py py-func docutils literal notranslate\">get_template()</code></a> charge un gabarit avec un moteur <a class=\"reference internal\" href=\"/fr/1.11/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a>, c’est un objet <code class=\"docutils literal notranslate\">django.template.backends.django.Template</code> qui est renvoyé.</p>\n<p>Les objets <code class=\"docutils literal notranslate\">Template</code> doivent fournir une méthode <a class=\"reference internal\" href=\"/fr/1.11/topics/templates/#django.template.backends.base.Template.render\" title=\"django.template.backends.base.Template.render\"><code class=\"xref py py-meth docutils literal notranslate\">render()</code></a> dont la signature diffère légèrement de la méthode <a class=\"reference internal\" href=\"/fr/1.11/ref/templates/api/#django.template.Template.render\" title=\"django.template.Template.render\"><code class=\"xref py py-meth docutils literal notranslate\">render()</code></a> du langage de gabarit de Django.</p>\n<p>Au lieu de :</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=\"nn\">django.template</span> <span class=\"kn\">import</span> Context\n<span class=\"kn\">from</span> <span class=\"nn\">django.template.loader</span> <span class=\"kn\">import</span> get_template\n\ntemplate <span class=\"o\">=</span> get_template<span class=\"p\">(</span><span class=\"s1\">&#39;hello.html&#39;</span><span class=\"p\">)</span>\nhtml <span class=\"o\">=</span> template<span class=\"o\">.</span>render<span class=\"p\">(</span>Context<span class=\"p\">({</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;world&#39;</span><span class=\"p\">}))</span>\n</code></pre></div>\n<p>Vous devriez écrire :</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=\"nn\">django.template.loader</span> <span class=\"kn\">import</span> get_template\n\ntemplate <span class=\"o\">=</span> get_template<span class=\"p\">(</span><span class=\"s1\">&#39;hello.html&#39;</span><span class=\"p\">)</span>\nhtml <span class=\"o\">=</span> template<span class=\"o\">.</span>render<span class=\"p\">({</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;world&#39;</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>Et au lieu de :</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=\"nn\">django.template</span> <span class=\"kn\">import</span> RequestContext\n<span class=\"kn\">from</span> <span class=\"nn\">django.template.loader</span> <span class=\"kn\">import</span> get_template\n\ntemplate <span class=\"o\">=</span> get_template<span class=\"p\">(</span><span class=\"s1\">&#39;hello.html&#39;</span><span class=\"p\">)</span>\nhtml <span class=\"o\">=</span> template<span class=\"o\">.</span>render<span class=\"p\">(</span>RequestContext<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;world&#39;</span><span class=\"p\">}))</span>\n</code></pre></div>\n<p>Vous devriez écrire :</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=\"nn\">django.template.loader</span> <span class=\"kn\">import</span> get_template\n\ntemplate <span class=\"o\">=</span> get_template<span class=\"p\">(</span><span class=\"s1\">&#39;hello.html&#39;</span><span class=\"p\">)</span>\nhtml <span class=\"o\">=</span> template<span class=\"o\">.</span>render<span class=\"p\">({</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;world&#39;</span><span class=\"p\">},</span> request<span class=\"p\">)</span>\n</code></pre></div>\n<p>La transmission d’un <a class=\"reference internal\" href=\"/fr/1.11/ref/templates/api/#django.template.Context\" title=\"django.template.Context\"><code class=\"xref py py-class docutils literal notranslate\">Context</code></a> ou d’un <a class=\"reference internal\" href=\"/fr/1.11/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a> est toujours possible lorsque le gabarit est chargé par un moteur <a class=\"reference internal\" href=\"/fr/1.11/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a>, mais cette possibilité est obsolète et ne sera plus prise en charge dans Django 1.10.</p>\n<p>Si vous chargez un gabarit lorsque vous êtes en train de produire un autre gabarit avec le langage de gabarit de Django et que vous avez accès au contexte courant, par exemple dans la méthode <code class=\"docutils literal notranslate\">render()</code> d’une balise de gabarit, vous pouvez utiliser le moteur <a class=\"reference internal\" href=\"/fr/1.11/ref/templates/api/#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a> actuel directement. Au lieu de :</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=\"nn\">django.template.loader</span> <span class=\"kn\">import</span> get_template\ntemplate <span class=\"o\">=</span> get_template<span class=\"p\">(</span><span class=\"s1\">&#39;included.html&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Vous pouvez écrire :</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>template <span class=\"o\">=</span> context<span class=\"o\">.</span>template<span class=\"o\">.</span>engine<span class=\"o\">.</span>get_template<span class=\"p\">(</span><span class=\"s1\">&#39;included.html&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Cela va charger le gabarit avec le moteur actuel sans faire appel à la machinerie des moteurs de gabarits multiples, ce qui est généralement le comportement souhaité. Au contraire des solutions précédentes, ceci renvoie un objet <a class=\"reference internal\" href=\"/fr/1.11/ref/templates/api/#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">django.template.Template</code></a>, comme le faisait <a class=\"reference internal\" href=\"/fr/1.11/topics/templates/#django.template.loader.get_template\" title=\"django.template.loader.get_template\"><code class=\"xref py py-func docutils literal notranslate\">get_template()</code></a> dans les versions de Django jusqu’à 1.7, ce qui évite tout problème de rétrocompatibilité.</p>\n</section>\n<section id=\"get-template-from-string\">\n<h3><code class=\"docutils literal notranslate\">get_template_from_string()</code><a class=\"heading-anchor\" href=\"#get-template-from-string\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>L’API privée <code class=\"docutils literal notranslate\">get_template_from_string(template_code)</code> a été supprimée dans Django 1.8 parce qu’il n’était pas possible de choisir un moteur pour compiler le gabarit.</p>\n<p>Trois alternatives sont disponibles.</p>\n<p>Si vous contrôlez les réglages du projet, vous pouvez utiliser l’un des moteurs configurés :</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=\"nn\">django.template</span> <span class=\"kn\">import</span> engines\n\ntemplate <span class=\"o\">=</span> engines<span class=\"p\">[</span><span class=\"s1\">&#39;django&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span>from_string<span class=\"p\">(</span>template_code<span class=\"p\">)</span>\n</code></pre></div>\n<p>Cela renvoie un objet <code class=\"docutils literal notranslate\">Template</code> dépendant du moteur.</p>\n<p>Pour les gabarits simplistes qui n’ont pas besoin de processeur de contexte ni aucune autre spécialité, vous pouvez créer un moteur élémentaire et utiliser sa méthode <code class=\"docutils literal notranslate\">from_string()</code>:</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=\"nn\">django.template</span> <span class=\"kn\">import</span> Engine\n\ntemplate <span class=\"o\">=</span> Engine<span class=\"p\">()</span><span class=\"o\">.</span>from_string<span class=\"p\">(</span>template_code<span class=\"p\">)</span>\n</code></pre></div>\n<p>Cela renvoie un <a class=\"reference internal\" href=\"/fr/1.11/ref/templates/api/#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\">django.template.Template</code></a> car <a class=\"reference internal\" href=\"/fr/1.11/ref/templates/api/#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\">Engine</code></a> fait partie de l’API du langage de gabarit de Django. La machinerie des moteurs de gabarits multiples n’est pas concernée ici.</p>\n<p>Finalement, si vous avez accès au contexte en cours, vous pouvez utiliser la même astuce que ci-dessus :</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>template <span class=\"o\">=</span> context<span class=\"o\">.</span>template<span class=\"o\">.</span>engine<span class=\"o\">.</span>from_string<span class=\"p\">(</span>template_code<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"template\">\n<h2><code class=\"docutils literal notranslate\">Template()</code><a class=\"heading-anchor\" href=\"#template\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>À un degré moindre, la création d’une instance de gabarit avec <code class=\"docutils literal notranslate\">Template(template_code)</code> souffre des mêmes problèmes que <code class=\"docutils literal notranslate\">get_template_from_string()</code>.</p>\n<p>Cela fonctionne toujours lorsque le réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> définit exactement un moteur <a class=\"reference internal\" href=\"/fr/1.11/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a>, mais les applications réutilisables ne peuvent pas contrôler cette exigence.</p>\n<p>Les deux dernières solutions décrites dans la section précédente sont recommandées dans ce cas.</p>\n</section>","rootId":"upgrading-templates-to-django-1-8","toc":[{"title":"Les réglages TEMPLATES","anchor":"the-templates-settings","children":[]},{"title":"django.template.loader","anchor":"django-template-loader","children":[{"title":"get_template() et select_template()","anchor":"get-template-and-select-template","children":[]},{"title":"get_template_from_string()","anchor":"get-template-from-string","children":[]}]},{"title":"Template()","anchor":"template","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/1.11/ref/"},{"docname":"ref/templates/index","title":"Gabarits","url":"/fr/1.11/ref/templates/"}],"prev":{"docname":"ref/templates/api","title":"Le langage de gabarit de Django : pour les programmeurs Python","url":"/fr/1.11/ref/templates/api/"},"next":{"docname":"ref/template-response","title":"TemplateResponse et SimpleTemplateResponse","url":"/fr/1.11/ref/template-response/"},"formats":{"html":"/fr/1.11/ref/templates/upgrading/","markdown":"/fr/1.11/ref/templates/upgrading.md","json":"/fr/1.11/ref/templates/upgrading.json"},"source":"https://github.com/django/django/blob/stable/1.11.x/docs/ref/templates/upgrading.txt","official":"https://docs.djangoproject.com/fr/1.11/ref/templates/upgrading/","inVersions":["1.11","1.10","1.9"],"inLocales":["en","fr","ja","id","pt-br","ko","es","el","pl"]}