{"title":"Mise à jour des gabarits pour Django 1.8","version":"1.9","locale":"fr","docname":"ref/templates/upgrading","url":"/fr/1.9/ref/templates/upgrading/","canonical":"https://djangodocs.dev/fr/1.9/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.9/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.9/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></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.9/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></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.9/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a> rétrocompatible sur la base des réglages <code class=\"docutils literal notranslate\"><span class=\"pre\">TEMPLATE_*</span></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.9/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></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\"><span class=\"pre\">TEMPLATE_LOADERS</span></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.9/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</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\">TEMPLATES</span> <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\"><span class=\"pre\">TEMPLATE_LOADERS</span></code>, voici comment vous devez définir <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</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\">TEMPLATES</span> <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\"><span class=\"pre\">django.core.context_processors</span></code> par <code class=\"docutils literal notranslate\"><span class=\"pre\">django.template.context_processors</span></code> dans les noms des processeurs de contexte.</p>\n<p>Si votre module de réglages définit <code class=\"docutils literal notranslate\"><span class=\"pre\">ALLOWED_INCLUDE_ROOTS</span></code> ou <code class=\"docutils literal notranslate\"><span class=\"pre\">TEMPLATE_STRING_IF_INVALID</span></code>, incluez leur valeur dans les clés “allowed_include_roots”` et <code class=\"docutils literal notranslate\"><span class=\"pre\">'string_if_invalid'</span></code> du dictionnaire <code class=\"docutils literal notranslate\"><span class=\"pre\">'OPTIONS'</span></code>.</p>\n<p>Si le réglage <code class=\"docutils literal notranslate\"><span class=\"pre\">TEMPLATE_DEBUG</span></code> contient une valeur différente de <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a>, incluez sa valeur dans la clé <code class=\"docutils literal notranslate\"><span class=\"pre\">'debug'</span></code> du dictionnaire <code class=\"docutils literal notranslate\"><span class=\"pre\">'OPTIONS'</span></code>.</p>\n<p>Après avoir défini <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a>, vous pouvez sans problème supprimer <code class=\"docutils literal notranslate\"><span class=\"pre\">ALLOWED_INCLUDE_ROOTS</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">TEMPLATE_CONTEXT_PROCESSORS</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">TEMPLATE_DEBUG</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">TEMPLATE_DIRS</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">TEMPLATE_LOADERS</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">TEMPLATE_STRING_IF_INVALID</span></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.9/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a>.</p>\n</section>\n<section id=\"django-template-loader\">\n<h2><a class=\"reference internal\" href=\"/fr/1.9/topics/templates/#module-django.template.loader\" title=\"django.template.loader\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.template.loader</span></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.9/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> et <a class=\"reference internal\" href=\"/fr/1.9/topics/templates/#django.template.loader.select_template\" title=\"django.template.loader.select_template\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">select_template()</span></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.9/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> et <a class=\"reference internal\" href=\"/fr/1.9/topics/templates/#django.template.loader.select_template\" title=\"django.template.loader.select_template\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">select_template()</span></code></a> renvoient un objet <code class=\"docutils literal notranslate\"><span class=\"pre\">Template</span></code> dépendant du moteur au lieu de <a class=\"reference internal\" href=\"/fr/1.9/ref/templates/api/#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.template.Template</span></code></a>.</p>\n<p>Par exemple, si <a class=\"reference internal\" href=\"/fr/1.9/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> charge un gabarit avec un moteur <a class=\"reference internal\" href=\"/fr/1.9/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>, c’est un objet <code class=\"docutils literal notranslate\"><span class=\"pre\">django.template.backends.django.Template</span></code> qui est renvoyé.</p>\n<p>Les objets <code class=\"docutils literal notranslate\"><span class=\"pre\">Template</span></code> doivent fournir une méthode <a class=\"reference internal\" href=\"/fr/1.9/topics/templates/#django.template.backends.base.Template.render\" title=\"django.template.backends.base.Template.render\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">render()</span></code></a> dont la signature diffère légèrement de la méthode <a class=\"reference internal\" href=\"/fr/1.9/ref/templates/api/#django.template.Template.render\" title=\"django.template.Template.render\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">render()</span></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=\"w\"> </span><span class=\"nn\">django.template</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Context</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.template.loader</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">get_template</span>\n\n<span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"n\">get_template</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello.html&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">html</span> <span class=\"o\">=</span> <span class=\"n\">template</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">Context</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=\"w\"> </span><span class=\"nn\">django.template.loader</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">get_template</span>\n\n<span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"n\">get_template</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello.html&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">html</span> <span class=\"o\">=</span> <span class=\"n\">template</span><span class=\"o\">.</span><span class=\"n\">render</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>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=\"w\"> </span><span class=\"nn\">django.template</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">RequestContext</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.template.loader</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">get_template</span>\n\n<span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"n\">get_template</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello.html&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">html</span> <span class=\"o\">=</span> <span class=\"n\">template</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">RequestContext</span><span class=\"p\">(</span><span class=\"n\">request</span><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=\"w\"> </span><span class=\"nn\">django.template.loader</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">get_template</span>\n\n<span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"n\">get_template</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello.html&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">html</span> <span class=\"o\">=</span> <span class=\"n\">template</span><span class=\"o\">.</span><span class=\"n\">render</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> <span class=\"n\">request</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>La transmission d’un <a class=\"reference internal\" href=\"/fr/1.9/ref/templates/api/#django.template.Context\" title=\"django.template.Context\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Context</span></code></a> ou d’un <a class=\"reference internal\" href=\"/fr/1.9/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RequestContext</span></code></a> est toujours possible lorsque le gabarit est chargé par un moteur <a class=\"reference internal\" href=\"/fr/1.9/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>, 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\"><span class=\"pre\">render()</span></code> d’une balise de gabarit, vous pouvez utiliser le moteur <a class=\"reference internal\" href=\"/fr/1.9/ref/templates/api/#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Engine</span></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=\"w\"> </span><span class=\"nn\">django.template.loader</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">get_template</span>\n<span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"n\">get_template</span><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><span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"n\">context</span><span class=\"o\">.</span><span class=\"n\">template</span><span class=\"o\">.</span><span class=\"n\">engine</span><span class=\"o\">.</span><span class=\"n\">get_template</span><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.9/ref/templates/api/#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.template.Template</span></code></a>, comme le faisait <a class=\"reference internal\" href=\"/fr/1.9/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> 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\"><span class=\"pre\">get_template_from_string()</span></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\"><span class=\"pre\">get_template_from_string(template_code)</span></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=\"w\"> </span><span class=\"nn\">django.template</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">engines</span>\n\n<span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"n\">engines</span><span class=\"p\">[</span><span class=\"s1\">&#39;django&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">from_string</span><span class=\"p\">(</span><span class=\"n\">template_code</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Cela renvoie un objet <code class=\"docutils literal notranslate\"><span class=\"pre\">Template</span></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\"><span class=\"pre\">from_string()</span></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=\"w\"> </span><span class=\"nn\">django.template</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Engine</span>\n\n<span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"n\">Engine</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">from_string</span><span class=\"p\">(</span><span class=\"n\">template_code</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Cela renvoie un <a class=\"reference internal\" href=\"/fr/1.9/ref/templates/api/#django.template.Template\" title=\"django.template.Template\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.template.Template</span></code></a> car <a class=\"reference internal\" href=\"/fr/1.9/ref/templates/api/#django.template.Engine\" title=\"django.template.Engine\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Engine</span></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><span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"n\">context</span><span class=\"o\">.</span><span class=\"n\">template</span><span class=\"o\">.</span><span class=\"n\">engine</span><span class=\"o\">.</span><span class=\"n\">from_string</span><span class=\"p\">(</span><span class=\"n\">template_code</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"template\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">Template()</span></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\"><span class=\"pre\">Template(template_code)</span></code> souffre des mêmes problèmes que <code class=\"docutils literal notranslate\"><span class=\"pre\">get_template_from_string()</span></code>.</p>\n<p>Cela fonctionne toujours lorsque le réglage <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a> définit exactement un moteur <a class=\"reference internal\" href=\"/fr/1.9/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>, 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.9/ref/"},{"docname":"ref/templates/index","title":"Gabarits","url":"/fr/1.9/ref/templates/"}],"prev":{"docname":"ref/templates/api","title":"Le langage de gabarit de Django : pour les programmeurs Python","url":"/fr/1.9/ref/templates/api/"},"next":{"docname":"ref/template-response","title":"TemplateResponse et SimpleTemplateResponse","url":"/fr/1.9/ref/template-response/"},"formats":{"html":"/fr/1.9/ref/templates/upgrading/","markdown":"/fr/1.9/ref/templates/upgrading.md","json":"/fr/1.9/ref/templates/upgrading.json"},"source":"https://github.com/django/django/blob/stable/1.9.x/docs/ref/templates/upgrading.txt","official":"https://docs.djangoproject.com/fr/1.9/ref/templates/upgrading/","inVersions":["1.11","1.10","1.9"],"inLocales":["en","fr","ja","id","pt-br","es"]}