{"title":"Le système des plans de site (sitemap)","version":"1.9","locale":"fr","docname":"ref/contrib/sitemaps","url":"/fr/1.9/ref/contrib/sitemaps/","canonical":"https://djangodocs.dev/fr/1.9/ref/contrib/sitemaps/","summary":"Django est livré avec un système de génération de plans de site à haut niveau qui permet de créer facilement des fichiers XML sitemap.","html":"<span id=\"the-sitemap-framework\"></span><h1>Le système des plans de site (<code class=\"docutils literal notranslate\">sitemap</code>)<a class=\"heading-anchor\" href=\"#module-django.contrib.sitemaps\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django est livré avec un système de génération de plans de site à haut niveau qui permet de créer facilement des fichiers XML <a class=\"reference external\" href=\"http://www.sitemaps.org/\">sitemap</a>.</p>\n<section id=\"overview\">\n<h2>Aperçu<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Un plan de site « sitemap » est un fichier XML sur un site Web indiquant aux robots des moteurs de recherche à quelle fréquence les pages changent et comment certaines pages « importantes » sont en relation avec d’autres pages du site. Cette information aide les moteurs de recherche à indexer un site.</p>\n<p>L’application sitemap de Django automatise la création de ce fichier XML en permettant d’exprimer cette information sous forme de code Python.</p>\n<p>Cela fonctionne un peu comme le <a class=\"reference internal\" href=\"/fr/1.9/ref/contrib/syndication/\"><span class=\"doc\">système de syndication</span></a> de Django. Pour créer un plan de site, il suffit d’écrire une classe <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\">Sitemap</code></a> et de la référencer dans la <a class=\"reference internal\" href=\"/fr/1.9/topics/http/urls/\"><span class=\"doc\">configuration d’URL</span></a>.</p>\n</section>\n<section id=\"installation\">\n<h2>Installation<a class=\"heading-anchor\" href=\"#installation\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Pour installer l’application sitemap, procédez comme suit :</p>\n<ol class=\"arabic simple\">\n<li><p>Ajoutez <code class=\"docutils literal notranslate\">'django.contrib.sitemaps'</code> au réglage <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>.</p></li>\n<li><p>Vérifiez la présence d’un moteur <code class=\"docutils literal notranslate\">DjangoTemplates``dont l'option ``APP_DIRS</code> vaut <code class=\"docutils literal notranslate\">True</code> dans 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\">TEMPLATES</code></a>. Il y est par défaut, de sorte que vous aurez uniquement besoin de l’ajouter si vous avez modifié ce réglage.</p></li>\n<li><p>Assurez-vous d’avoir installé le <a class=\"reference internal\" href=\"/fr/1.9/ref/contrib/sites/#module-django.contrib.sites\" title=\"django.contrib.sites: Lets you operate multiple websites from the same database and Django project\"><code class=\"xref py py-mod docutils literal notranslate\">gestionnaire de sites</code></a>.</p></li>\n</ol>\n<p>(Remarque : l’application sitemap n’installe aucune table de base de données. La seule raison pour laquelle elle doit être présente dans <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> est que la fonction de chargement des gabarits <a class=\"reference internal\" href=\"/fr/1.9/ref/templates/api/#django.template.loaders.app_directories.Loader\" title=\"django.template.loaders.app_directories.Loader\"><code class=\"xref py py-func docutils literal notranslate\">Loader()</code></a> doit pouvoir trouver les gabarits par défaut.)</p>\n</section>\n<section id=\"initialization\">\n<h2>Initialisation<a class=\"heading-anchor\" href=\"#initialization\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.views.sitemap\">\n<span class=\"sig-prename descclassname\">views.</span><span class=\"sig-name descname\">sitemap</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">sitemaps</em>, <em class=\"sig-param\">section<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">'sitemap.xml'</span></em>, <em class=\"sig-param\">content_type<span class=\"o\">=</span><span class=\"default_value\">'application/xml'</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.views.sitemap\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Pour activer la génération du plan du site d’un site Django, ajoutez cette ligne à la <a class=\"reference internal\" href=\"/fr/1.9/topics/http/urls/\"><span class=\"doc\">configuration d’URL</span></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=\"kn\">from</span> <span class=\"nn\">django.contrib.sitemaps.views</span> <span class=\"kn\">import</span> sitemap\n\nurl<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^sitemap\\.xml$&#39;</span><span class=\"p\">,</span> sitemap<span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;sitemaps&#39;</span><span class=\"p\">:</span> sitemaps<span class=\"p\">},</span>\n    name<span class=\"o\">=</span><span class=\"s1\">&#39;django.contrib.sitemaps.views.sitemap&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Cela indique à Django de construire un plan de site lorsqu’un client accède à <code class=\"file docutils literal notranslate\">/sitemap.xml</code>.</p>\n<p>Le nom du fichier sitemap n’est pas important, mais l’emplacement l’est. Les moteurs de recherche n’indexeront que les liens du plan de site à partir du niveau actuel de l’URL et en-dessous. Par exemple, si <code class=\"file docutils literal notranslate\">sitemap.xml</code> réside dans le répertoire racine, il peut faire référence à n’importe quelle URL du site. Cependant, si le fichier sitemap réside dans <code class=\"file docutils literal notranslate\">/content/sitemap.xml</code>, il ne peut référencer que des URL qui commencent par <code class=\"file docutils literal notranslate\">/content/</code>.</p>\n<p>La vue <code class=\"docutils literal notranslate\">sitemap</code> accepte un paramètre supplémentaire obligatoire : <code class=\"docutils literal notranslate\">{'sitemaps': sitemaps}</code>. <code class=\"docutils literal notranslate\">sitemaps</code> doit être un dictionnaire qui associe une étiquette de section courte (par exemple, <code class=\"docutils literal notranslate\">blog</code> ou <code class=\"docutils literal notranslate\">nouvelles</code>) à sa classe <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\">Sitemap</code></a> (par exemple, <code class=\"docutils literal notranslate\">BlogSitemap</code> ou <code class=\"docutils literal notranslate\">NewsSitemap</code>). Il peut également s’appliquer à une <em>instance</em> de classe <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\">Sitemap</code></a> (par exemple, <code class=\"docutils literal notranslate\">BlogSitemap(ma_variable)</code>).</p>\n</section>\n<section id=\"sitemap-classes\">\n<h2>Classes <code class=\"docutils literal notranslate\">Sitemap</code><a class=\"heading-anchor\" href=\"#sitemap-classes\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Une classe <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\">Sitemap</code></a> est une simple classe Python qui représente une « section » d’entrées dans votre plan de site. Par exemple, une classe <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\">Sitemap</code></a> pourrait représenter toutes les entrées de votre blog, tandis qu’une autre pourrait représenter tous les évènements d’un calendrier d’évènements.</p>\n<p>Dans le cas le plus simple, toutes ces sections sont regroupées dans un seul <code class=\"file docutils literal notranslate\">sitemap.xml</code>, mais il est également possible d’utiliser le système pour générer un index de sitemap qui référence d’autres fichiers sitemap individuels, un par section (voir <a class=\"reference internal\" href=\"#creating-a-sitemap-index\">Création d’un index de plan de site</a> ci-dessous).</p>\n<p>Les classes <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\">Sitemap</code></a> doivent être des sous-classes de <code class=\"docutils literal notranslate\">django.contrib.sitemaps.Sitemap</code>. Elles peuvent résider n’importe où dans votre code source.</p>\n</section>\n<section id=\"a-simple-example\">\n<h2>Un exemple simple<a class=\"heading-anchor\" href=\"#a-simple-example\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Supposons que vous avez un système de blog, avec un modèle <code class=\"docutils literal notranslate\">Entry</code>. Vous souhaitez que le plan de site contienne les liens vers tous les articles de blog. Voici à quoi la classe de plan de site pourrait ressembler :</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.contrib.sitemaps</span> <span class=\"kn\">import</span> Sitemap\n<span class=\"kn\">from</span> <span class=\"nn\">blog.models</span> <span class=\"kn\">import</span> Entry\n\n<span class=\"k\">class</span> <span class=\"nc\">BlogSitemap</span><span class=\"p\">(</span>Sitemap<span class=\"p\">):</span>\n    changefreq <span class=\"o\">=</span> <span class=\"s2\">&quot;never&quot;</span>\n    priority <span class=\"o\">=</span> <span class=\"mf\">0.5</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">items</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>is_draft<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">lastmod</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> obj<span class=\"p\">):</span>\n        <span class=\"k\">return</span> obj<span class=\"o\">.</span>pub_date\n</code></pre></div>\n<p>Remarque :</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.changefreq\" title=\"django.contrib.sitemaps.Sitemap.changefreq\"><code class=\"xref py py-attr docutils literal notranslate\">changefreq</code></a> et <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.priority\" title=\"django.contrib.sitemaps.Sitemap.priority\"><code class=\"xref py py-attr docutils literal notranslate\">priority</code></a> sont des attributs de classe correspondant respectivement aux éléments <code class=\"docutils literal notranslate\">&lt;changefreq&gt;</code> et <code class=\"docutils literal notranslate\">&lt;priority&gt;</code>. Il est possible qu’ils correspondent à des fonctions, comme pour <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.lastmod\" title=\"django.contrib.sitemaps.Sitemap.lastmod\"><code class=\"xref py py-attr docutils literal notranslate\">lastmod</code></a> dans l’exemple ci-dessus.</p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.items\" title=\"django.contrib.sitemaps.Sitemap.items\"><code class=\"xref py py-attr docutils literal notranslate\">items()</code></a> est tout simplement une méthode qui renvoie une liste d’objets. Les objets renvoyés seront transmis à toute méthode exécutable correspondant à une propriété de sitemap (<a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.location\" title=\"django.contrib.sitemaps.Sitemap.location\"><code class=\"xref py py-attr docutils literal notranslate\">location</code></a>, <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.lastmod\" title=\"django.contrib.sitemaps.Sitemap.lastmod\"><code class=\"xref py py-attr docutils literal notranslate\">lastmod</code></a>, <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.changefreq\" title=\"django.contrib.sitemaps.Sitemap.changefreq\"><code class=\"xref py py-attr docutils literal notranslate\">changefreq</code></a> et <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.priority\" title=\"django.contrib.sitemaps.Sitemap.priority\"><code class=\"xref py py-attr docutils literal notranslate\">priority</code></a>).</p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.lastmod\" title=\"django.contrib.sitemaps.Sitemap.lastmod\"><code class=\"xref py py-attr docutils literal notranslate\">lastmod</code></a> should return a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime</code></a>.</p></li>\n<li><p>Il n’y a pas de méthode <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.location\" title=\"django.contrib.sitemaps.Sitemap.location\"><code class=\"xref py py-attr docutils literal notranslate\">location</code></a> dans cet exemple, mais vous pouvez la fournir afin de préciser l’URL de l’objet. Par défaut, <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.location\" title=\"django.contrib.sitemaps.Sitemap.location\"><code class=\"xref py py-attr docutils literal notranslate\">location()</code></a> appelle <code class=\"docutils literal notranslate\">get_absolute_url()</code> pour chaque objet et renvoie le résultat.</p></li>\n</ul>\n</section>\n<section id=\"sitemap-class-reference\">\n<h2>Référence de la classe <code class=\"docutils literal notranslate\">Sitemap</code><a class=\"heading-anchor\" href=\"#sitemap-class-reference\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.Sitemap\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Sitemap</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une classe <code class=\"docutils literal notranslate\">Sitemap</code> peut définir les méthodes/attributs suivants :</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.Sitemap.items\">\n<span class=\"sig-name descname\">items</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.items\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Obligatoire.</strong> Une méthode qui renvoie une liste d’objets. Le système ne se soucie pas de quel <em>type</em> d’objet il s’agit ; tout ce qui compte, c’est que ces objets sont transmis aux méthodes <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.location\" title=\"django.contrib.sitemaps.Sitemap.location\"><code class=\"xref py py-attr docutils literal notranslate\">location()</code></a>, <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.lastmod\" title=\"django.contrib.sitemaps.Sitemap.lastmod\"><code class=\"xref py py-attr docutils literal notranslate\">lastmod()</code></a>, <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.changefreq\" title=\"django.contrib.sitemaps.Sitemap.changefreq\"><code class=\"xref py py-attr docutils literal notranslate\">changefreq()</code></a> et <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.priority\" title=\"django.contrib.sitemaps.Sitemap.priority\"><code class=\"xref py py-attr docutils literal notranslate\">priority()</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.Sitemap.location\">\n<span class=\"sig-name descname\">location</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.location\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Facultatif.</strong> Soit une méthode, soit un attribut.</p>\n<p>Si c’est une méthode, elle doit renvoyer le chemin absolu pour le dit objet renvoyé par <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.items\" title=\"django.contrib.sitemaps.Sitemap.items\"><code class=\"xref py py-attr docutils literal notranslate\">items()</code></a>.</p>\n<p>Si c’est un attribut, sa valeur doit être une chaîne représentant un chemin absolu à utiliser pour <em>chaque</em> objet renvoyé par <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.items\" title=\"django.contrib.sitemaps.Sitemap.items\"><code class=\"xref py py-attr docutils literal notranslate\">items()</code></a>.</p>\n<p>Dans les deux cas, « chemin absolu » signifie une URL qui ne comprend ni le protocole ni le domaine. Exemples :</p>\n<ul class=\"simple\">\n<li><p>Bon : <code class=\"file docutils literal notranslate\">'/foo/bar/'</code></p></li>\n<li><p>Mauvais : <code class=\"file docutils literal notranslate\">'example.com/foo/bar/'</code></p></li>\n<li><p>Mauvais : <code class=\"file docutils literal notranslate\">'https://example.com/foo/bar/'</code></p></li>\n</ul>\n<p>Si <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.location\" title=\"django.contrib.sitemaps.Sitemap.location\"><code class=\"xref py py-attr docutils literal notranslate\">location</code></a> n’est pas fourni, le système appelle la méthode <code class=\"docutils literal notranslate\">get_absolute_url()</code> de chaque objet renvoyé par <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.items\" title=\"django.contrib.sitemaps.Sitemap.items\"><code class=\"xref py py-attr docutils literal notranslate\">items()</code></a>.</p>\n<p>Pour indiquer un protocole autre que <code class=\"docutils literal notranslate\">'http'</code>, utilisez <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.protocol\" title=\"django.contrib.sitemaps.Sitemap.protocol\"><code class=\"xref py py-attr docutils literal notranslate\">protocol</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.Sitemap.lastmod\">\n<span class=\"sig-name descname\">lastmod</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.lastmod\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Facultatif.</strong> Soit une méthode, soit un attribut.</p>\n<p>If it’s a method, it should take one argument – an object as returned\nby <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.items\" title=\"django.contrib.sitemaps.Sitemap.items\"><code class=\"xref py py-attr docutils literal notranslate\">items()</code></a> – and return that object’s last-modified\ndate/time as a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime</code></a>.</p>\n<p>If it’s an attribute, its value should be a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(disponible dans Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">datetime</code></a>\nrepresenting the last-modified date/time for <em>every</em> object returned by\n<a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.items\" title=\"django.contrib.sitemaps.Sitemap.items\"><code class=\"xref py py-attr docutils literal notranslate\">items()</code></a>.</p>\n<p>Si tous les éléments d’un plan de site possèdent <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.lastmod\" title=\"django.contrib.sitemaps.Sitemap.lastmod\"><code class=\"xref py py-attr docutils literal notranslate\">lastmod</code></a>, le plan de site généré par <a class=\"reference internal\" href=\"#django.contrib.sitemaps.views.sitemap\" title=\"django.contrib.sitemaps.views.sitemap\"><code class=\"xref py py-func docutils literal notranslate\">views.sitemap()</code></a> comportera un en-tête <code class=\"docutils literal notranslate\">Last-Modified</code> égal à la valeur <code class=\"docutils literal notranslate\">lastmod</code> la plus récente. Vous pouvez activer l’intergiciel <a class=\"reference internal\" href=\"/fr/1.9/ref/middleware/#django.middleware.http.ConditionalGetMiddleware\" title=\"django.middleware.http.ConditionalGetMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">ConditionalGetMiddleware</code></a> pour que Django réponde de manière appropriée aux requêtes contenant un en-tête <code class=\"docutils literal notranslate\">If-Modified-Since</code>, ce qui évitera d’envoyer le plan de site si celui-ci n’a pas changé.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.Sitemap.changefreq\">\n<span class=\"sig-name descname\">changefreq</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.changefreq\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Facultatif.</strong> Soit une méthode, soit un attribut.</p>\n<p>If it’s a method, it should take one argument – an object as returned\nby <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.items\" title=\"django.contrib.sitemaps.Sitemap.items\"><code class=\"xref py py-attr docutils literal notranslate\">items()</code></a> – and return that object’s change\nfrequency as a string.</p>\n<p>Si c’est un attribut, sa valeur doit être une chaîne représentant la fréquence de modification de <em>chaque</em> objet renvoyé par <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.items\" title=\"django.contrib.sitemaps.Sitemap.items\"><code class=\"xref py py-attr docutils literal notranslate\">items()</code></a>.</p>\n<p>Les valeurs possibles pour <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.changefreq\" title=\"django.contrib.sitemaps.Sitemap.changefreq\"><code class=\"xref py py-attr docutils literal notranslate\">changefreq</code></a>, que ce soit une méthode ou un attribut, sont :</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">'always'</code> (toujours)</p></li>\n<li><p><code class=\"docutils literal notranslate\">'hourly'</code> (chaque heure)</p></li>\n<li><p><code class=\"docutils literal notranslate\">'daily'</code> (quotidiennement)</p></li>\n<li><p><code class=\"docutils literal notranslate\">'weekly'</code> (chaque semaine)</p></li>\n<li><p><code class=\"docutils literal notranslate\">'monthly'</code> (chaque mois)</p></li>\n<li><p><code class=\"docutils literal notranslate\">'yearly'</code> (annuellement)</p></li>\n<li><p><code class=\"docutils literal notranslate\">'never'</code> (jamais)</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.Sitemap.priority\">\n<span class=\"sig-name descname\">priority</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.priority\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Facultatif.</strong> Soit une méthode, soit un attribut.</p>\n<p>If it’s a method, it should take one argument – an object as returned\nby <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.items\" title=\"django.contrib.sitemaps.Sitemap.items\"><code class=\"xref py py-attr docutils literal notranslate\">items()</code></a> – and return that object’s priority as\neither a string or float.</p>\n<p>Si c’est un attribut, sa valeur doit être une chaîne ou un nombre à virgule représentant la priorité de <em>chaque</em> objet renvoyé par <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.items\" title=\"django.contrib.sitemaps.Sitemap.items\"><code class=\"xref py py-attr docutils literal notranslate\">items()</code></a>.</p>\n<p>Exemples de valeurs pour <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.priority\" title=\"django.contrib.sitemaps.Sitemap.priority\"><code class=\"xref py py-attr docutils literal notranslate\">priority</code></a>: <code class=\"docutils literal notranslate\">0.4</code>, <code class=\"docutils literal notranslate\">1.0</code>. La priorité par défaut d’une page est de <code class=\"docutils literal notranslate\">0.5</code>. Voir la <a class=\"reference external\" href=\"http://www.sitemaps.org/protocol.html#prioritydef\">documentation de sitemaps.org</a> pour plus d’informations.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.Sitemap.protocol\">\n<span class=\"sig-name descname\">protocol</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.protocol\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Facultatif.</strong></p>\n<p>Cet attribut définit le protocole (<code class=\"docutils literal notranslate\">'http'</code> ou <code class=\"docutils literal notranslate\">'https'</code>) des URL dans le plan du site. S’il n’est pas défini, le protocole avec lequel le plan du site a été demandé sera utilisé. Si le plan du site est construit en dehors du contexte d’une requête, la valeur par défaut est <code class=\"docutils literal notranslate\">'http'</code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.Sitemap.limit\">\n<span class=\"sig-name descname\">limit</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.limit\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>Facultatif.</strong></p>\n<p>Cet attribut définit le nombre maximum d’URL incluses sur chaque page du plan de site. Sa valeur ne doit pas dépasser la valeur par défaut de <code class=\"docutils literal notranslate\">50000</code>, qui est la valeur limite supérieure autorisée par le <a class=\"reference external\" href=\"http://www.sitemaps.org/protocol.html#index\">protocole des plans de site</a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.Sitemap.i18n\">\n<span class=\"sig-name descname\">i18n</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.i18n\"><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=\"1.8\" role=\"note\">\n<p class=\"version-note-title\">New in Django 1.8</p></aside>\n<p><strong>Facultatif.</strong></p>\n<p>Un attribut booléen qui définit si les URL de ce plan de site doivent être générées en utilisant toutes les langues de <a class=\"reference internal\" href=\"/fr/1.9/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\">LANGUAGES</code></a>. La valeur par défaut est <code class=\"docutils literal notranslate\">False</code>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"shortcuts\">\n<h2>Raccourcis<a class=\"heading-anchor\" href=\"#shortcuts\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>L’infrastructure sitemap fournit une classe pratique pour un cas courant :</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.GenericSitemap\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">GenericSitemap</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.GenericSitemap\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>La classe <a class=\"reference internal\" href=\"#django.contrib.sitemaps.GenericSitemap\" title=\"django.contrib.sitemaps.GenericSitemap\"><code class=\"xref py py-class docutils literal notranslate\">django.contrib.sitemaps.GenericSitemap</code></a> permet de créer un plan du site en lui passant un dictionnaire qui doit contenir au minimum une entrée <code class=\"docutils literal notranslate\">queryset</code>. Ce jeu de requête sera utilisé pour générer les éléments du plan du site. Le dictionnaire peut aussi contenir une clé <code class=\"docutils literal notranslate\">date_field</code> qui définit un champ de date pour les objets récupérés par <code class=\"docutils literal notranslate\">queryset</code>. Ce champ sera utilisé pour l’attribut <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.lastmod\" title=\"django.contrib.sitemaps.Sitemap.lastmod\"><code class=\"xref py py-attr docutils literal notranslate\">lastmod</code></a> dans le plan du site généré. Vous pouvez également passer les paramètres nommés <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.priority\" title=\"django.contrib.sitemaps.Sitemap.priority\"><code class=\"xref py py-attr docutils literal notranslate\">priority</code></a> et <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.changefreq\" title=\"django.contrib.sitemaps.Sitemap.changefreq\"><code class=\"xref py py-attr docutils literal notranslate\">changefreq</code></a> au constructeur de <a class=\"reference internal\" href=\"#django.contrib.sitemaps.GenericSitemap\" title=\"django.contrib.sitemaps.GenericSitemap\"><code class=\"xref py py-class docutils literal notranslate\">GenericSitemap</code></a> pour définir ces attributs pour toutes les URL.</p>\n</dd></dl>\n\n<section id=\"example\">\n<h3>Exemple<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Voici un exemple de <a class=\"reference internal\" href=\"/fr/1.9/topics/http/urls/\"><span class=\"doc\">configuration d’URL</span></a> utilisant <a class=\"reference internal\" href=\"#django.contrib.sitemaps.GenericSitemap\" title=\"django.contrib.sitemaps.GenericSitemap\"><code class=\"xref py py-class docutils literal notranslate\">GenericSitemap</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=\"kn\">from</span> <span class=\"nn\">django.conf.urls</span> <span class=\"kn\">import</span> url\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.sitemaps</span> <span class=\"kn\">import</span> GenericSitemap\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.sitemaps.views</span> <span class=\"kn\">import</span> sitemap\n<span class=\"kn\">from</span> <span class=\"nn\">blog.models</span> <span class=\"kn\">import</span> Entry\n\ninfo_dict <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;queryset&#39;</span><span class=\"p\">:</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">(),</span>\n    <span class=\"s1\">&#39;date_field&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;pub_date&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\"># some generic view using info_dict</span>\n    <span class=\"c1\"># ...</span>\n\n    <span class=\"c1\"># the sitemap</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^sitemap\\.xml$&#39;</span><span class=\"p\">,</span> sitemap<span class=\"p\">,</span>\n        <span class=\"p\">{</span><span class=\"s1\">&#39;sitemaps&#39;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s1\">&#39;blog&#39;</span><span class=\"p\">:</span> GenericSitemap<span class=\"p\">(</span>info_dict<span class=\"p\">,</span> priority<span class=\"o\">=</span><span class=\"mf\">0.6</span><span class=\"p\">)}},</span>\n        name<span class=\"o\">=</span><span class=\"s1\">&#39;django.contrib.sitemaps.views.sitemap&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"sitemap-for-static-views\">\n<h2>Plan de site pour les vues statiques<a class=\"heading-anchor\" href=\"#sitemap-for-static-views\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Il peut souvent être nécessaire de faire indexer par les robots des moteurs de recherche des vues qui ne sont ni des pages de détail d’un objet, ni des pages statiques. La solution est de fournir une liste explicite de noms d’URL pour ces vues dans <code class=\"docutils literal notranslate\">items</code> et d’appeler <a class=\"reference internal\" href=\"/fr/1.9/ref/urlresolvers/#django.core.urlresolvers.reverse\" title=\"django.core.urlresolvers.reverse\"><code class=\"xref py py-func docutils literal notranslate\">reverse()</code></a> dans la méthode <code class=\"docutils literal notranslate\">location</code> du sitemap. Par exemple :</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=\"c1\"># sitemaps.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> sitemaps\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"kn\">import</span> reverse\n\n<span class=\"k\">class</span> <span class=\"nc\">StaticViewSitemap</span><span class=\"p\">(</span>sitemaps<span class=\"o\">.</span>Sitemap<span class=\"p\">):</span>\n    priority <span class=\"o\">=</span> <span class=\"mf\">0.5</span>\n    changefreq <span class=\"o\">=</span> <span class=\"s1\">&#39;daily&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">items</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"s1\">&#39;main&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;about&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;license&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">location</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> item<span class=\"p\">):</span>\n        <span class=\"k\">return</span> reverse<span class=\"p\">(</span>item<span class=\"p\">)</span>\n\n<span class=\"c1\"># urls.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.conf.urls</span> <span class=\"kn\">import</span> url\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.sitemaps.views</span> <span class=\"kn\">import</span> sitemap\n\n<span class=\"kn\">from</span> <span class=\"nn\">.sitemaps</span> <span class=\"kn\">import</span> StaticViewSitemap\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\nsitemaps <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;static&#39;</span><span class=\"p\">:</span> StaticViewSitemap<span class=\"p\">,</span>\n<span class=\"p\">}</span>\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^$&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>main<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;main&#39;</span><span class=\"p\">),</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^about/$&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>about<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;about&#39;</span><span class=\"p\">),</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^license/$&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>license<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;license&#39;</span><span class=\"p\">),</span>\n    <span class=\"c1\"># ...</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^sitemap\\.xml$&#39;</span><span class=\"p\">,</span> sitemap<span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;sitemaps&#39;</span><span class=\"p\">:</span> sitemaps<span class=\"p\">},</span>\n        name<span class=\"o\">=</span><span class=\"s1\">&#39;django.contrib.sitemaps.views.sitemap&#39;</span><span class=\"p\">)</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</section>\n<section id=\"creating-a-sitemap-index\">\n<h2>Création d’un index de plan de site<a class=\"heading-anchor\" href=\"#creating-a-sitemap-index\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.views.index\">\n<span class=\"sig-prename descclassname\">views.</span><span class=\"sig-name descname\">index</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">sitemaps</em>, <em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">'sitemap_index.xml'</span></em>, <em class=\"sig-param\">content_type<span class=\"o\">=</span><span class=\"default_value\">'application/xml'</span></em>, <em class=\"sig-param\">sitemap_url_name<span class=\"o\">=</span><span class=\"default_value\">'django.contrib.sitemaps.views.sitemap'</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.views.index\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Le système sitemap a également la possibilité de créer un index de plan de site qui référence des fichiers sitemap individuels, un pour chaque section définie dans le dictionnaire <code class=\"docutils literal notranslate\">sitemaps</code>. Les seules différences dans l’utilisation sont les suivantes :</p>\n<ul class=\"simple\">\n<li><p>Vous utilisez deux vues dans la configuration d’URL : <a class=\"reference internal\" href=\"#django.contrib.sitemaps.views.index\" title=\"django.contrib.sitemaps.views.index\"><code class=\"xref py py-func docutils literal notranslate\">django.contrib.sitemaps.views.index()</code></a> et <a class=\"reference internal\" href=\"#django.contrib.sitemaps.views.sitemap\" title=\"django.contrib.sitemaps.views.sitemap\"><code class=\"xref py py-func docutils literal notranslate\">django.contrib.sitemaps.views.sitemap()</code></a>.</p></li>\n<li><p>La vue <a class=\"reference internal\" href=\"#django.contrib.sitemaps.views.sitemap\" title=\"django.contrib.sitemaps.views.sitemap\"><code class=\"xref py py-func docutils literal notranslate\">django.contrib.sitemaps.views.sitemap()</code></a> doit accepter un paramètre nommé <code class=\"docutils literal notranslate\">section</code>.</p></li>\n</ul>\n<p>Voici à quoi ressembleraient les lignes appropriées de la configuration d’URL pour l’exemple 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=\"kn\">from</span> <span class=\"nn\">django.contrib.sitemaps</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^sitemap\\.xml$&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>index<span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;sitemaps&#39;</span><span class=\"p\">:</span> sitemaps<span class=\"p\">}),</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^sitemap-(?P&lt;section&gt;.+)\\.xml$&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>sitemap<span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;sitemaps&#39;</span><span class=\"p\">:</span> sitemaps<span class=\"p\">},</span>\n        name<span class=\"o\">=</span><span class=\"s1\">&#39;django.contrib.sitemaps.views.sitemap&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Cela générera automatiquement un fichier <code class=\"file docutils literal notranslate\">sitemap.xml</code> faisant référence à la fois à <code class=\"file docutils literal notranslate\">sitemap-flatpages.xml</code> et à <code class=\"file docutils literal notranslate\">sitemap-blog.xml</code>. Les classes <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\">Sitemap</code></a> et le dictionnaire <code class=\"docutils literal notranslate\">sitemaps</code> ne changent aucunement.</p>\n<p>Vous devriez créer un fichier d’index lorsqu’un plan de site contient plus de 50 000 URL. Dans ce cas, Django pagine automatiquement le plan du site et l’index reflétera cette situation.</p>\n<p>Si vous n’utilisez pas la vue sitemap ordinaire – par exemple, si elle est enveloppée par un décorateur de mise en cache – vous devez nommer votre vue sitemap et passer <code class=\"docutils literal notranslate\">sitemap_url_name</code> à la vue d’index :</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.contrib.sitemaps</span> <span class=\"kn\">import</span> views <span class=\"k\">as</span> sitemaps_views\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.decorators.cache</span> <span class=\"kn\">import</span> cache_page\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^sitemap\\.xml$&#39;</span><span class=\"p\">,</span>\n        cache_page<span class=\"p\">(</span><span class=\"mi\">86400</span><span class=\"p\">)(</span>sitemaps_views<span class=\"o\">.</span>index<span class=\"p\">),</span>\n        <span class=\"p\">{</span><span class=\"s1\">&#39;sitemaps&#39;</span><span class=\"p\">:</span> sitemaps<span class=\"p\">,</span> <span class=\"s1\">&#39;sitemap_url_name&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;sitemaps&#39;</span><span class=\"p\">}),</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^sitemap-(?P&lt;section&gt;.+)\\.xml$&#39;</span><span class=\"p\">,</span>\n        cache_page<span class=\"p\">(</span><span class=\"mi\">86400</span><span class=\"p\">)(</span>sitemaps_views<span class=\"o\">.</span>sitemap<span class=\"p\">),</span>\n        <span class=\"p\">{</span><span class=\"s1\">&#39;sitemaps&#39;</span><span class=\"p\">:</span> sitemaps<span class=\"p\">},</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;sitemaps&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</section>\n<section id=\"template-customization\">\n<h2>Personnalisation de gabarit<a class=\"heading-anchor\" href=\"#template-customization\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Si vous souhaitez utiliser un gabarit différent pour chaque plan de site ou d’index de plan de site disponible sur un site, vous pouvez l’indiquer en passant un paramètre <code class=\"docutils literal notranslate\">template_name</code> aux vues <code class=\"docutils literal notranslate\">sitemap</code> et <code class=\"docutils literal notranslate\">index</code> via la configuration d’URL :</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.contrib.sitemaps</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^custom-sitemap\\.xml$&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>index<span class=\"p\">,</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;sitemaps&#39;</span><span class=\"p\">:</span> sitemaps<span class=\"p\">,</span>\n        <span class=\"s1\">&#39;template_name&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;custom_sitemap.html&#39;</span>\n    <span class=\"p\">}),</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^custom-sitemap-(?P&lt;section&gt;.+)\\.xml$&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>sitemap<span class=\"p\">,</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;sitemaps&#39;</span><span class=\"p\">:</span> sitemaps<span class=\"p\">,</span>\n        <span class=\"s1\">&#39;template_name&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;custom_sitemap.html&#39;</span>\n    <span class=\"p\">},</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;django.contrib.sitemaps.views.sitemap&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Ces vues renvoient des instances <a class=\"reference internal\" href=\"/fr/1.9/ref/template-response/#django.template.response.TemplateResponse\" title=\"django.template.response.TemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\">TemplateResponse</code></a> permettant de personnaliser facilement les données de réponse avant le processus de rendu. Pour plus de détails, consultez la <a class=\"reference internal\" href=\"/fr/1.9/ref/template-response/\"><span class=\"doc\">documentation de TemplateResponse</span></a>.</p>\n<section id=\"context-variables\">\n<h3>Variables de contexte<a class=\"heading-anchor\" href=\"#context-variables\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Lors de la personnalisation des gabarits pour les vues <a class=\"reference internal\" href=\"#django.contrib.sitemaps.views.index\" title=\"django.contrib.sitemaps.views.index\"><code class=\"xref py py-func docutils literal notranslate\">index()</code></a> et <a class=\"reference internal\" href=\"#django.contrib.sitemaps.views.sitemap\" title=\"django.contrib.sitemaps.views.sitemap\"><code class=\"xref py py-func docutils literal notranslate\">sitemap()</code></a>, vous pouvez compter sur les variables de contexte suivantes.</p>\n</section>\n<section id=\"index\">\n<h3>Accueil<a class=\"heading-anchor\" href=\"#index\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>La variable <code class=\"docutils literal notranslate\">sitemaps</code> est une liste des URL absolues vers chacun des plans du site.</p>\n</section>\n<section id=\"id1\">\n<h3>Sitemap<a class=\"heading-anchor\" href=\"#id1\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>La variable <code class=\"docutils literal notranslate\">urlset</code> est une liste d’URL devant apparaître dans le plan du site. Chaque URL expose des attributs tels que définis dans la classe <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\">Sitemap</code></a>:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">changefreq</code> (fréquence de modification)</p></li>\n<li><p><code class=\"docutils literal notranslate\">item</code> (élément)</p></li>\n<li><p><code class=\"docutils literal notranslate\">lastmod</code> (date de dernière modification)</p></li>\n<li><p><code class=\"docutils literal notranslate\">location</code> (adresse)</p></li>\n<li><p><code class=\"docutils literal notranslate\">priority</code> (priorité)</p></li>\n</ul>\n<p>L’attribut <code class=\"docutils literal notranslate\">item</code> a été ajouté pour chaque URL afin de permettre une personnalisation plus souple des gabarits, comme pour les <a class=\"reference external\" href=\"https://support.google.com/news/publisher/answer/74288?hl=en\">Google news sitemaps</a>. En supposant que <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.items\" title=\"django.contrib.sitemaps.Sitemap.items\"><code class=\"xref py py-attr docutils literal notranslate\">items()</code></a> de <code class=\"docutils literal notranslate\">Sitemap</code> renvoie une liste d’éléments avec des champs <code class=\"docutils literal notranslate\">publication_date</code> et <code class=\"docutils literal notranslate\">tags</code>, le code ci-dessous devrait générer un plan de site compatible avec Google News :</p>\n<div class=\"code-block\" data-language=\"xml+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Xml Django</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=\"Xml Django code\"><code><span class=\"cp\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>\n<span class=\"nt\">&lt;urlset</span>\n  <span class=\"na\">xmlns=</span><span class=\"s\">&quot;http://www.sitemaps.org/schemas/sitemap/0.9&quot;</span>\n  <span class=\"na\">xmlns:news=</span><span class=\"s\">&quot;http://www.google.com/schemas/sitemap-news/0.9&quot;</span><span class=\"nt\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">spaceless</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">url</span> <span class=\"k\">in</span> <span class=\"nv\">urlset</span> <span class=\"cp\">%}</span>\n  <span class=\"nt\">&lt;url&gt;</span>\n    <span class=\"nt\">&lt;loc&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">url.location</span> <span class=\"cp\">}}</span><span class=\"nt\">&lt;/loc&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">url.lastmod</span> <span class=\"cp\">%}</span><span class=\"nt\">&lt;lastmod&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">url.lastmod</span><span class=\"o\">|</span><span class=\"nf\">date</span><span class=\"s2\">:&quot;Y-m-d&quot;</span> <span class=\"cp\">}}</span><span class=\"nt\">&lt;/lastmod&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">url.changefreq</span> <span class=\"cp\">%}</span><span class=\"nt\">&lt;changefreq&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">url.changefreq</span> <span class=\"cp\">}}</span><span class=\"nt\">&lt;/changefreq&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">url.priority</span> <span class=\"cp\">%}</span><span class=\"nt\">&lt;priority&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">url.priority</span> <span class=\"cp\">}}</span><span class=\"nt\">&lt;/priority&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n    <span class=\"nt\">&lt;news:news&gt;</span>\n      <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">url.item.publication_date</span> <span class=\"cp\">%}</span><span class=\"nt\">&lt;news:publication_date&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">url.item.publication_date</span><span class=\"o\">|</span><span class=\"nf\">date</span><span class=\"s2\">:&quot;Y-m-d&quot;</span> <span class=\"cp\">}}</span><span class=\"nt\">&lt;/news:publication_date&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n      <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">url.item.tags</span> <span class=\"cp\">%}</span><span class=\"nt\">&lt;news:keywords&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">url.item.tags</span> <span class=\"cp\">}}</span><span class=\"nt\">&lt;/news:keywords&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n    <span class=\"nt\">&lt;/news:news&gt;</span>\n   <span class=\"nt\">&lt;/url&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endspaceless</span> <span class=\"cp\">%}</span>\n<span class=\"nt\">&lt;/urlset&gt;</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"pinging-google\">\n<h2>Signalement à Google<a class=\"heading-anchor\" href=\"#pinging-google\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Lorsqu’un plan de site change, il peut être souhaitable de le signaler à Google, afin qu’il sache qu’il doit réindexer le site. Le système sitemaps fournit une fonction pour faire exactement cela : <a class=\"reference internal\" href=\"#django.contrib.sitemaps.ping_google\" title=\"django.contrib.sitemaps.ping_google\"><code class=\"xref py py-func docutils literal notranslate\">django.contrib.sitemaps.ping_google()</code></a>.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.ping_google\">\n<span class=\"sig-name descname\">ping_google</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.ping_google\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.contrib.sitemaps.ping_google\" title=\"django.contrib.sitemaps.ping_google\"><code class=\"xref py py-func docutils literal notranslate\">ping_google()</code></a> accepte un paramètre facultatif, <code class=\"docutils literal notranslate\">sitemap_url</code>, qui doit être le chemin absolu vers le plan du site (par exemple, <code class=\"file docutils literal notranslate\">'/sitemap.xml'</code>). Si ce paramètre n’est pas fourni, <a class=\"reference internal\" href=\"#django.contrib.sitemaps.ping_google\" title=\"django.contrib.sitemaps.ping_google\"><code class=\"xref py py-func docutils literal notranslate\">ping_google()</code></a> tente de trouver lui-même le plan du site en effectuant une recherche inverse dans la configuration d’URL.</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.sitemaps.ping_google\" title=\"django.contrib.sitemaps.ping_google\"><code class=\"xref py py-func docutils literal notranslate\">ping_google()</code></a> génère l’exception <code class=\"docutils literal notranslate\">django.contrib.sitemaps.SitemapNotFound</code> si elle ne peut pas déterminer l’URL du plan du site.</p>\n</dd></dl>\n\n<aside class=\"admonition-register-with-google-first admonition\" role=\"note\">\n<p class=\"admonition-title\">Inscription préalable chez Google !</p>\n<p>La commande <a class=\"reference internal\" href=\"#django.contrib.sitemaps.ping_google\" title=\"django.contrib.sitemaps.ping_google\"><code class=\"xref py py-func docutils literal notranslate\">ping_google()</code></a> ne fonctionne que si vous avez inscrit le site avec <a class=\"reference external\" href=\"https://www.google.com/webmasters/tools/\">Google Webmaster Tools</a>.</p>\n</aside>\n<p>Une façon utile d’appeler <a class=\"reference internal\" href=\"#django.contrib.sitemaps.ping_google\" title=\"django.contrib.sitemaps.ping_google\"><code class=\"xref py py-func docutils literal notranslate\">ping_google()</code></a> est de le faire à partir de la méthode <code class=\"docutils literal notranslate\">save()</code> d’un modèle :</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.contrib.sitemaps</span> <span class=\"kn\">import</span> ping_google\n\n<span class=\"k\">class</span> <span class=\"nc\">Entry</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> force_insert<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> force_update<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span>Entry<span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span>save<span class=\"p\">(</span>force_insert<span class=\"p\">,</span> force_update<span class=\"p\">)</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            ping_google<span class=\"p\">()</span>\n        <span class=\"k\">except</span> <span class=\"ne\">Exception</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Bare &#39;except&#39; because we could get a variety</span>\n            <span class=\"c1\"># of HTTP-related exceptions.</span>\n            <span class=\"k\">pass</span>\n</code></pre></div>\n<p>Toutefois, une solution plus efficace serait d’appeler <a class=\"reference internal\" href=\"#django.contrib.sitemaps.ping_google\" title=\"django.contrib.sitemaps.ping_google\"><code class=\"xref py py-func docutils literal notranslate\">ping_google()</code></a> à partir d’un script cron ou de tout autre tâche planifiée. La fonction effectue une requête HTTP vers les serveurs de Google, il n’est donc pas forcément souhaitable d’introduire cette charge réseau chaque fois que <code class=\"docutils literal notranslate\">save()</code> est appelée.</p>\n<section id=\"pinging-google-via-manage-py\">\n<h3>Signalement à Google via <code class=\"docutils literal notranslate\">manage.py</code><a class=\"heading-anchor\" href=\"#pinging-google-via-manage-py\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"std django-admin\">\n<dt class=\"sig sig-object std\" id=\"django-admin-ping_google\">\n<span class=\"sig-name descname\">django-admin ping_google [sitemap_url]</span><a class=\"heading-anchor\" href=\"#django-admin-ping_google\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Une fois l’application sitemaps ajoutée à un projet, il est aussi possible de prévenir Google en utilisant la commande de gestion <code class=\"docutils literal notranslate\">ping_google</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>python manage<span class=\"o\">.</span>py ping_google <span class=\"p\">[</span><span class=\"o\">/</span>sitemap<span class=\"o\">.</span>xml<span class=\"p\">]</span>\n</code></pre></div>\n</section>\n</section>","rootId":"module-django.contrib.sitemaps","toc":[{"title":"Aperçu","anchor":"overview","children":[]},{"title":"Installation","anchor":"installation","children":[]},{"title":"Initialisation","anchor":"initialization","children":[]},{"title":"Classes Sitemap","anchor":"sitemap-classes","children":[]},{"title":"Un exemple simple","anchor":"a-simple-example","children":[]},{"title":"Référence de la classe Sitemap","anchor":"sitemap-class-reference","children":[]},{"title":"Raccourcis","anchor":"shortcuts","children":[{"title":"Exemple","anchor":"example","children":[]}]},{"title":"Plan de site pour les vues statiques","anchor":"sitemap-for-static-views","children":[]},{"title":"Création d’un index de plan de site","anchor":"creating-a-sitemap-index","children":[]},{"title":"Personnalisation de gabarit","anchor":"template-customization","children":[{"title":"Variables de contexte","anchor":"context-variables","children":[]},{"title":"Accueil","anchor":"index","children":[]},{"title":"Sitemap","anchor":"id1","children":[]}]},{"title":"Signalement à Google","anchor":"pinging-google","children":[{"title":"Signalement à Google via manage.py","anchor":"pinging-google-via-manage-py","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/1.9/ref/"},{"docname":"ref/contrib/index","title":"Paquets contrib","url":"/fr/1.9/ref/contrib/"}],"prev":{"docname":"ref/contrib/redirects","title":"L’application de redirection","url":"/fr/1.9/ref/contrib/redirects/"},"next":{"docname":"ref/contrib/sites","title":"L’infrastructure des « sites »","url":"/fr/1.9/ref/contrib/sites/"},"formats":{"html":"/fr/1.9/ref/contrib/sitemaps/","markdown":"/fr/1.9/ref/contrib/sitemaps.md","json":"/fr/1.9/ref/contrib/sitemaps.json"},"source":"https://github.com/django/django/blob/stable/1.9.x/docs/ref/contrib/sitemaps.txt","official":"https://docs.djangoproject.com/fr/1.9/ref/contrib/sitemaps/","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","1.10","1.9"],"inLocales":["en","fr","ja","id","pt-br","es"]}