{"title":"站点地图框架","version":"4.2","locale":"zh-hans","docname":"ref/contrib/sitemaps","url":"/zh-hans/4.2/ref/contrib/sitemaps/","canonical":"https://djangodocs.dev/zh-hans/4.2/ref/contrib/sitemaps/","summary":"Django 自带了一个高级站点地图生成框架来创建 sitemap XML 文件。 概况 Link to this heading # 站点地图是你网站上的一个 XML 文件，它告诉搜索引擎索引器你页面的变化频率，以及某些页面相对于你网站上其他页面的“重要性”。这些信息有助于搜索引擎对你的网站进行索引。 Django…","html":"<span id=\"the-sitemap-framework\"></span><h1>站点地图框架<a class=\"heading-anchor\" href=\"#module-django.contrib.sitemaps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django 自带了一个高级站点地图生成框架来创建 <a class=\"reference external\" href=\"https://www.sitemaps.org/\">sitemap</a> XML 文件。</p>\n<section id=\"overview\">\n<h2>概况<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>站点地图是你网站上的一个 XML 文件，它告诉搜索引擎索引器你页面的变化频率，以及某些页面相对于你网站上其他页面的“重要性”。这些信息有助于搜索引擎对你的网站进行索引。</p>\n<p>Django 站点地图框架通过让你用 Python 代码表达这些信息以自动创建这个 XML 文件。</p>\n<p>它的工作原理很像 Django 的 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/syndication/\"><span class=\"doc\">联合框架</span></a>。要创建一个站点地图，写一个 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Sitemap</span></code></a> 类，并将其指向你的 <a class=\"reference internal\" href=\"/zh-hans/4.2/topics/http/urls/\"><span class=\"doc\">URLconf</span></a>。</p>\n</section>\n<section id=\"installation\">\n<h2>安装<a class=\"heading-anchor\" href=\"#installation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>要安装站点地图应用，请按照以下步骤进行：</p>\n<ol class=\"arabic simple\">\n<li><p>将 <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.sitemaps'</span></code> 添加到你的 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 配置中。</p></li>\n<li><p>确保你的 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a> 配置中包含一个 <code class=\"docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code> 后端，其 <code class=\"docutils literal notranslate\"><span class=\"pre\">APP_DIRS</span></code> 选项设置为 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>。默认有一个后端，所以你只需要改变这个配置就可以了。</p></li>\n<li><p>确保你已经安装了 <a class=\"reference internal\" href=\"/zh-hans/4.2/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\"><span class=\"pre\">sites</span> <span class=\"pre\">framework</span></code></a>。</p></li>\n</ol>\n<p>（注意：站点地图应用不会安装任何数据库表。它需要进入 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 的唯一原因是为了让 <a class=\"reference internal\" href=\"/zh-hans/4.2/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\"><span class=\"pre\">Loader()</span></code></a> 模板加载器能够找到默认模板。）</p>\n</section>\n<section id=\"initialization\">\n<h2>初始化<a class=\"heading-anchor\" href=\"#initialization\"><span class=\"visually-hidden\">Link to this heading</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\"><span class=\"pre\">views.</span></span><span class=\"sig-name descname\"><span class=\"pre\">sitemap</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">sitemaps</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">section</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'sitemap.xml'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">content_type</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'application/xml'</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.views.sitemap\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>要在你的 Django 网站上激活站点地图的生成，在你的 <a class=\"reference internal\" href=\"/zh-hans/4.2/topics/http/urls/\"><span class=\"doc\">URLconf</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=\"w\"> </span><span class=\"nn\">django.contrib.sitemaps.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">sitemap</span>\n\n<span class=\"n\">path</span><span class=\"p\">(</span>\n    <span class=\"s2\">&quot;sitemap.xml&quot;</span><span class=\"p\">,</span>\n    <span class=\"n\">sitemap</span><span class=\"p\">,</span>\n    <span class=\"p\">{</span><span class=\"s2\">&quot;sitemaps&quot;</span><span class=\"p\">:</span> <span class=\"n\">sitemaps</span><span class=\"p\">},</span>\n    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;django.contrib.sitemaps.views.sitemap&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>这告诉 Django 在客户端访问 <code class=\"file docutils literal notranslate\"><span class=\"pre\">/sitemap.xml</span></code> 时建立一个站点地图。</p>\n<p>站点地图文件的名称并不重要，但位置很重要。搜索引擎只对当前URL级别及以下的站点地图链接进行索引。例如，如果 <code class=\"file docutils literal notranslate\"><span class=\"pre\">sitemap.xml</span></code> 位于你的根目录下，它可以引用您网站中的任何URL。但是，如果您的站点地图位于 <code class=\"file docutils literal notranslate\"><span class=\"pre\">/content/sitemap.xml</span></code>，则只能引用以 <code class=\"file docutils literal notranslate\"><span class=\"pre\">/content/</span></code> 开头的 URL。</p>\n<p>sitemap 视图需要一个额外的、必要的参数：<code class=\"docutils literal notranslate\"><span class=\"pre\">{'sitemaps':</span> <span class=\"pre\">sitemaps}</span></code>。<code class=\"docutils literal notranslate\"><span class=\"pre\">sitemaps</span></code> 应该是一个字典，它将一个简短的章节标签（例如，<code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span></code> 或 <code class=\"docutils literal notranslate\"><span class=\"pre\">news</span></code>）映射到它的 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Sitemap</span></code></a> 类（例如，<code class=\"docutils literal notranslate\"><span class=\"pre\">BlogSitemap</span></code> 或 <code class=\"docutils literal notranslate\"><span class=\"pre\">NewsSitemap</span></code>）。也可以映射到一个 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Sitemap</span></code></a> 类的 <em>实例</em> （例如，<code class=\"docutils literal notranslate\"><span class=\"pre\">BlogSitemap(some_var)</span></code>）。</p>\n</section>\n<section id=\"sitemap-classes\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">Sitemap</span></code> 类<a class=\"heading-anchor\" href=\"#sitemap-classes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Sitemap</span></code></a> 类是一个 Python 类，在你的网站地图中代表一个条目的“部分”。例如，一个 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Sitemap</span></code></a> 类可以代表你的博客的所有条目，而另一个则可以代表你的事件日历中的所有事件。</p>\n<p>在最简单的情况下，所有这些部分都被归纳到一个 <code class=\"file docutils literal notranslate\"><span class=\"pre\">sitemap.xml</span></code> 中，但也可以使用该框架生成一个站点地图索引来引用单个站点地图文件，每个部分一个。（参见下面的 <a class=\"reference internal\" href=\"#creating-a-sitemap-index\">创建一个站点地图索引</a> ）。</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Sitemap</span></code></a> 类必须是 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.sitemaps.Sitemap</span></code> 子类。它们可以存在于你代码库的任何地方。</p>\n</section>\n<section id=\"an-example\">\n<h2>一个例子<a class=\"heading-anchor\" href=\"#an-example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>让我们假设你有一个博客系统，有一个 <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</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.contrib.sitemaps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Sitemap</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">blog.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Entry</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">BlogSitemap</span><span class=\"p\">(</span><span class=\"n\">Sitemap</span><span class=\"p\">):</span>\n    <span class=\"n\">changefreq</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;never&quot;</span>\n    <span class=\"n\">priority</span> <span class=\"o\">=</span> <span class=\"mf\">0.5</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </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=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">is_draft</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">lastmod</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">pub_date</span>\n</code></pre></div>\n<p>注意：</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\"><span class=\"pre\">changefreq</span></code></a> 和 <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\"><span class=\"pre\">priority</span></code></a> 分别是用作 <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;changefreq&gt;</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;priority&gt;</span></code> 元素的类属性。它们可以作为函数调用，就像本例中的 <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\"><span class=\"pre\">lastmod</span></code></a> 一样。</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\"><span class=\"pre\">items()</span></code></a> 是一个返回 <a class=\"reference external\" href=\"https://docs.python.org/3/glossary.html#term-sequence\" title=\"(in Python v3.14)\"><span class=\"xref std std-term\">sequence</span></a> 或 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> 对象的方法。返回的对象将被传递给对应于站点地图属性的任何可调用方法（<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\"><span class=\"pre\">location</span></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\"><span class=\"pre\">lastmod</span></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\"><span class=\"pre\">changefreq</span></code></a> 和 <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\"><span class=\"pre\">priority</span></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\"><span class=\"pre\">lastmod</span></code></a> 应该返回一个 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a>。</p></li>\n<li><p>本例中没有 <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\"><span class=\"pre\">location</span></code></a> 方法，但你可以提供该方法来指定对象的 URL。默认情况下，<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\"><span class=\"pre\">location()</span></code></a> 调用每个对象的 <code class=\"docutils literal notranslate\"><span class=\"pre\">get_absolute_url()</span></code> 并返回结果。</p></li>\n</ul>\n</section>\n<section id=\"sitemap-class-reference\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">Sitemap</span></code> 类参考<a class=\"heading-anchor\" href=\"#sitemap-class-reference\"><span class=\"visually-hidden\">Link to this heading</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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Sitemap</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Sitemap</span></code> 类可以定义以下方法／属性。</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\"><span class=\"pre\">items</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.items\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>必须的。</strong> 一个返回对象的 <a class=\"reference external\" href=\"https://docs.python.org/3/glossary.html#term-sequence\" title=\"(in Python v3.14)\"><span class=\"xref std std-term\">sequence</span></a> 或 <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> 的方法。框架并不关心它们是什么类型的对象，重要的是这些对象被传递给 <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\"><span class=\"pre\">location()</span></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\"><span class=\"pre\">lastmod()</span></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\"><span class=\"pre\">changefreq()</span></code></a> 和 <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\"><span class=\"pre\">priority()</span></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\"><span class=\"pre\">location</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.location\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>可选的。</strong> 方法或属性。</p>\n<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\"><span class=\"pre\">items()</span></code></a> 返回的给定对象的绝对路径。</p>\n<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\"><span class=\"pre\">items()</span></code></a> 返回的 <em>每一个</em> 对象。</p>\n<p>在这两种情况下，“绝对路径”指的是不包含协议或域名的 URL。例如：</p>\n<ul class=\"simple\">\n<li><p>好的：<code class=\"docutils literal notranslate\"><span class=\"pre\">'/foo/bar/'</span></code></p></li>\n<li><p>不好的：<code class=\"docutils literal notranslate\"><span class=\"pre\">'example.com/foo/bar/'</span></code></p></li>\n<li><p>不好的：<code class=\"docutils literal notranslate\"><span class=\"pre\">'https://example.com/foo/bar/'</span></code></p></li>\n</ul>\n<p>如果没有提供 <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\"><span class=\"pre\">location</span></code></a>，框架将调用 <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\"><span class=\"pre\">items()</span></code></a> 返回的每个对象的 <code class=\"docutils literal notranslate\"><span class=\"pre\">get_absolute_url()</span></code> 方法。</p>\n<p>如果要指定 <code class=\"docutils literal notranslate\"><span class=\"pre\">'http'</span></code> 以外的协议，请使用 <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\"><span class=\"pre\">protocol</span></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\"><span class=\"pre\">lastmod</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.lastmod\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>可选的。</strong> 方法或属性。</p>\n<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\"><span class=\"pre\">items()</span></code></a> 返回的对象——并以 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a> 返回该对象最后修改的日期／时间。</p>\n<p>如果是属性，其值应该是 <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a>，代表 <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\"><span class=\"pre\">items()</span></code></a> 返回的 <em>每一个</em> 对象的最后修改日期／时间。</p>\n<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\"><span class=\"pre\">lastmod</span></code></a>，那么由 <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\"><span class=\"pre\">views.sitemap()</span></code></a> 生成的站点地图将有一个 <code class=\"docutils literal notranslate\"><span class=\"pre\">Last-Modified</span></code> 头，等于最新的 <code class=\"docutils literal notranslate\"><span class=\"pre\">lastmod</span></code>。你可以激活 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/middleware/#django.middleware.http.ConditionalGetMiddleware\" title=\"django.middleware.http.ConditionalGetMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ConditionalGetMiddleware</span></code></a>，让 Django 对请求做出适当的响应，并提供 <code class=\"docutils literal notranslate\"><span class=\"pre\">If-Modified-Since</span></code> 头，防止发送没有变化的站点地图。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.Sitemap.paginator\">\n<span class=\"sig-name descname\"><span class=\"pre\">paginator</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.paginator\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>可选的。</strong></p>\n<p>这个属性返回一个 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/paginator/#django.core.paginator.Paginator\" title=\"django.core.paginator.Paginator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Paginator</span></code></a> 的 <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\"><span class=\"pre\">items()</span></code></a>。如果你批量生成网站地图，你可能想覆盖这个属性作为一个缓存属性，以避免多次调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">items()</span></code>。</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\"><span class=\"pre\">changefreq</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.changefreq\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>可选的。</strong> 方法或属性。</p>\n<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\"><span class=\"pre\">items()</span></code></a> 返回的对象——并以字符串形式返回该对象的变化频率。</p>\n<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\"><span class=\"pre\">items()</span></code></a> 返回的 <em>每一个</em> 对象的变化频率。</p>\n<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\"><span class=\"pre\">changefreq</span></code></a> 的可能值，无论你是使用方法还是属性，都是：</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'always'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'hourly'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'daily'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'weekly'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'monthly'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'yearly'</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'never'</span></code></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\"><span class=\"pre\">priority</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.priority\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>可选的。</strong> 方法或属性。</p>\n<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\"><span class=\"pre\">items()</span></code></a> 返回的对象——并以字符串或浮点数的形式返回该对象的优先级。</p>\n<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\"><span class=\"pre\">items()</span></code></a> 返回的 <em>每一个</em> 对象的优先级。</p>\n<p><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\"><span class=\"pre\">priority</span></code></a> 的示例值：<code class=\"docutils literal notranslate\"><span class=\"pre\">0.4</span></code>，<code class=\"docutils literal notranslate\"><span class=\"pre\">1.0</span></code>。页面的默认优先级是 <code class=\"docutils literal notranslate\"><span class=\"pre\">0.5</span></code>。更多信息请参见  <a class=\"reference external\" href=\"https://www.sitemaps.org/protocol.html#prioritydef\">sitemaps.org documentation</a> 。</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\"><span class=\"pre\">protocol</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.protocol\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>可选的。</strong></p>\n<p>该属性定义了网站地图中 URL 的协议（<code class=\"docutils literal notranslate\"><span class=\"pre\">'http'</span></code> 或 <code class=\"docutils literal notranslate\"><span class=\"pre\">'https'</span></code>）。如果没有设置，则使用请求网站地图的协议。如果站点地图是在请求之外建立的，则默认为 <code class=\"docutils literal notranslate\"><span class=\"pre\">'http'</span></code>。</p>\n<aside class=\"version-note version-deprecated\" data-version=\"4.0\">\n<p class=\"version-note-title\">Deprecated since Django 4.0</p><p><span class=\"versionmodified deprecated\">Deprecated since version 4.0: </span>在 Django 5.0 中，在请求上下文之外建立的网站地图的默认协议将从 <code class=\"docutils literal notranslate\"><span class=\"pre\">’http'``改为</span> <span class=\"pre\">``'https'</span></code>。</p>\n</aside>\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\"><span class=\"pre\">limit</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.limit\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>可选的。</strong></p>\n<p>该属性定义了网站地图每一页所包含的 URL 的最大数量。其值不应超过默认值 <code class=\"docutils literal notranslate\"><span class=\"pre\">50000</span></code>，这是 <a class=\"reference external\" href=\"https://www.sitemaps.org/protocol.html#index\">Sitemaps protocol</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\"><span class=\"pre\">i18n</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.i18n\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>可选的。</strong></p>\n<p>一个布尔属性，用于定义该网站地图的 URL 是否应使用所有的 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGES</span></code></a> 生成。默认值是 <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.Sitemap.languages\">\n<span class=\"sig-name descname\"><span class=\"pre\">languages</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.languages\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>可选的。</strong></p>\n<p>启用 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.i18n\" title=\"django.contrib.sitemaps.Sitemap.i18n\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">i18n</span></code></a> 时用于生成备用链接的 <a class=\"reference internal\" href=\"/zh-hans/4.2/topics/i18n/#term-language-code\"><span class=\"xref std std-term\">语言代码</span></a> <a class=\"reference external\" href=\"https://docs.python.org/3/glossary.html#term-sequence\" title=\"(in Python v3.14)\"><span class=\"xref std std-term\">sequence</span></a>。默认为 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/settings/#std-setting-LANGUAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGES</span></code></a>。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.Sitemap.alternates\">\n<span class=\"sig-name descname\"><span class=\"pre\">alternates</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.alternates\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>可选的。</strong></p>\n<p>一个布尔属性。当与 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.i18n\" title=\"django.contrib.sitemaps.Sitemap.i18n\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">i18n</span></code></a> 结合使用时，生成的 URL 将有一个备用链接列表，使用 <a class=\"reference external\" href=\"https://developers.google.com/search/docs/advanced/crawling/localized-versions\">hreflang attribute</a> 指向其他语言版本。默认为 <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.Sitemap.x_default\">\n<span class=\"sig-name descname\"><span class=\"pre\">x_default</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.x_default\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><strong>可选的。</strong></p>\n<p>一个布尔属性。当 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> 时，由 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.alternates\" title=\"django.contrib.sitemaps.Sitemap.alternates\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">alternates</span></code></a> 生成的备用链接将包含一个 <code class=\"docutils literal notranslate\"><span class=\"pre\">hreflang=&quot;x-default&quot;</span></code> 回退条目，其值为 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/settings/#std-setting-LANGUAGE_CODE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_CODE</span></code></a>。默认值是 <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.Sitemap.get_latest_lastmod\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_latest_lastmod</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.get_latest_lastmod\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"4.1\">\n<p class=\"version-note-title\">New in Django 4.1</p></aside>\n<p><strong>可选项。</strong> 一个方法，返回由 <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\"><span class=\"pre\">lastmod</span></code></a> 返回的最新值。此函数用于向 <a class=\"reference internal\" href=\"#sitemap-index-context-variables\"><span class=\"std std-ref\">Sitemap 索引上下文变量</span></a> 添加 <code class=\"docutils literal notranslate\"><span class=\"pre\">lastmod</span></code> 属性。</p>\n<p>默认情况下，<a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.get_latest_lastmod\" title=\"django.contrib.sitemaps.Sitemap.get_latest_lastmod\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_latest_lastmod()</span></code></a> 返回：</p>\n<ul class=\"simple\">\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\"><span class=\"pre\">lastmod</span></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\"><span class=\"pre\">lastmod</span></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\"><span class=\"pre\">lastmod</span></code></a> 是一个方法：通过使用 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.items\" title=\"django.contrib.sitemaps.Sitemap.items\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Sitemap.items()</span></code></a> 返回的所有项目调用该方法后返回的最新的 <code class=\"docutils literal notranslate\"><span class=\"pre\">lastmod</span></code>。</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sitemaps.Sitemap.get_languages_for_item\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_languages_for_item</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">item</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.Sitemap.get_languages_for_item\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"4.2\">\n<p class=\"version-note-title\">New in Django 4.2</p></aside>\n<p><strong>可选项。</strong> 一个方法，返回显示该项的语言代码序列。默认情况下，<a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.get_languages_for_item\" title=\"django.contrib.sitemaps.Sitemap.get_languages_for_item\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_languages_for_item()</span></code></a> 返回 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.languages\" title=\"django.contrib.sitemaps.Sitemap.languages\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">languages</span></code></a>。</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"shortcuts\">\n<h2>捷径<a class=\"heading-anchor\" href=\"#shortcuts\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>站点地图框架为常见的情况提供了一个方便的类：</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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">GenericSitemap</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">info_dict</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">priority</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">changefreq</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">protocol</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.GenericSitemap\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.contrib.sitemaps.GenericSitemap\" title=\"django.contrib.sitemaps.GenericSitemap\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.contrib.sitemaps.GenericSitemap</span></code></a> 类允许您通过传递一个至少包含 <code class=\"docutils literal notranslate\"><span class=\"pre\">queryset</span></code> 条目的字典来创建一个站点地图。这个查询集将用于生成站点地图的项。它还可以有一个 <code class=\"docutils literal notranslate\"><span class=\"pre\">date_field</span></code> 条目，用于指定从 <code class=\"docutils literal notranslate\"><span class=\"pre\">queryset</span></code> 中检索的对象的日期字段。这将在生成的站点地图中用于 <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\"><span class=\"pre\">lastmod</span></code></a> 属性和 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.get_latest_lastmod\" title=\"django.contrib.sitemaps.Sitemap.get_latest_lastmod\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_latest_lastmod()</span></code></a> 方法。</p>\n<p><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\"><span class=\"pre\">priority</span></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\"><span class=\"pre\">changefreq</span></code></a> 和 <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\"><span class=\"pre\">protocol</span></code></a> 关键字参数允许为所有 URL 指定这些属性。</p>\n</dd></dl>\n\n<section id=\"example\">\n<h3>例如<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>下面是一个使用 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.GenericSitemap\" title=\"django.contrib.sitemaps.GenericSitemap\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GenericSitemap</span></code></a> 的 <a class=\"reference internal\" href=\"/zh-hans/4.2/topics/http/urls/\"><span class=\"doc\">URLconf</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=\"w\"> </span><span class=\"nn\">django.contrib.sitemaps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">GenericSitemap</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.sitemaps.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">sitemap</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">blog.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Entry</span>\n\n<span class=\"n\">info_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;queryset&quot;</span><span class=\"p\">:</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(),</span>\n    <span class=\"s2\">&quot;date_field&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">urlpatterns</span> <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    <span class=\"c1\"># the sitemap</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;sitemap.xml&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sitemap</span><span class=\"p\">,</span>\n        <span class=\"p\">{</span><span class=\"s2\">&quot;sitemaps&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;blog&quot;</span><span class=\"p\">:</span> <span class=\"n\">GenericSitemap</span><span class=\"p\">(</span><span class=\"n\">info_dict</span><span class=\"p\">,</span> <span class=\"n\">priority</span><span class=\"o\">=</span><span class=\"mf\">0.6</span><span class=\"p\">)}},</span>\n        <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;django.contrib.sitemaps.views.sitemap&quot;</span><span class=\"p\">,</span>\n    <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>静态视图的站点地图<a class=\"heading-anchor\" href=\"#sitemap-for-static-views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>通常情况下，你希望搜索引擎爬虫能够索引那些既不是对象详情页也不是简单页面的视图。解决的办法是在 <code class=\"docutils literal notranslate\"><span class=\"pre\">items</span></code> 中明确列出这些视图的 URL 名称，并在站点地图的 <code class=\"docutils literal notranslate\"><span class=\"pre\">location</span></code> 方法中调用 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">reverse()</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=\"c1\"># sitemaps.py</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">sitemaps</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reverse</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">StaticViewSitemap</span><span class=\"p\">(</span><span class=\"n\">sitemaps</span><span class=\"o\">.</span><span class=\"n\">Sitemap</span><span class=\"p\">):</span>\n    <span class=\"n\">priority</span> <span class=\"o\">=</span> <span class=\"mf\">0.5</span>\n    <span class=\"n\">changefreq</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;daily&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </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=\"s2\">&quot;main&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;about&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;license&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">location</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">item</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"n\">item</span><span class=\"p\">)</span>\n\n\n<span class=\"c1\"># urls.py</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.sitemaps.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">sitemap</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.sitemaps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">StaticViewSitemap</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">sitemaps</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;static&quot;</span><span class=\"p\">:</span> <span class=\"n\">StaticViewSitemap</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">main</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;main&quot;</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;about/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">about</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;about&quot;</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;license/&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">license</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;license&quot;</span><span class=\"p\">),</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;sitemap.xml&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">sitemap</span><span class=\"p\">,</span>\n        <span class=\"p\">{</span><span class=\"s2\">&quot;sitemaps&quot;</span><span class=\"p\">:</span> <span class=\"n\">sitemaps</span><span class=\"p\">},</span>\n        <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;django.contrib.sitemaps.views.sitemap&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</section>\n<section id=\"creating-a-sitemap-index\">\n<h2>创建站点地图索引<a class=\"heading-anchor\" href=\"#creating-a-sitemap-index\"><span class=\"visually-hidden\">Link to this heading</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\"><span class=\"pre\">views.</span></span><span class=\"sig-name descname\"><span class=\"pre\">index</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">sitemaps</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'sitemap_index.xml'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">content_type</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'application/xml'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">sitemap_url_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'django.contrib.sitemaps.views.sitemap'</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.views.index\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>站点地图框架还能够创建一个站点地图索引，该索引能够引用单独的站点地图文件，每个部分在你的 <code class=\"docutils literal notranslate\"><span class=\"pre\">sitemaps</span></code> 字典中定义一个。唯一不同的用法是：</p>\n<ul class=\"simple\">\n<li><p>你在 URLconf 中使用了两个视图： <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\"><span class=\"pre\">django.contrib.sitemaps.views.index()</span></code></a> 和  <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\"><span class=\"pre\">django.contrib.sitemaps.views.sitemap()</span></code></a>。</p></li>\n<li><p><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\"><span class=\"pre\">django.contrib.sitemaps.views.sitemap()</span></code></a> 视图应该采用 <code class=\"docutils literal notranslate\"><span class=\"pre\">section</span></code> 关键字作为参数。</p></li>\n</ul>\n<p>下面是上面例子的相关 URLconf 行的样子：</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.contrib.sitemaps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;sitemap.xml&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">,</span>\n        <span class=\"p\">{</span><span class=\"s2\">&quot;sitemaps&quot;</span><span class=\"p\">:</span> <span class=\"n\">sitemaps</span><span class=\"p\">},</span>\n        <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;django.contrib.sitemaps.views.index&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;sitemap-&lt;section&gt;.xml&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">sitemap</span><span class=\"p\">,</span>\n        <span class=\"p\">{</span><span class=\"s2\">&quot;sitemaps&quot;</span><span class=\"p\">:</span> <span class=\"n\">sitemaps</span><span class=\"p\">},</span>\n        <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;django.contrib.sitemaps.views.sitemap&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>这将自动生成一个 <code class=\"file docutils literal notranslate\"><span class=\"pre\">sitemap.xml</span></code> 文件，同时引用 <code class=\"file docutils literal notranslate\"><span class=\"pre\">sitemap-flatpages.xml</span></code> 和 <code class=\"file docutils literal notranslate\"><span class=\"pre\">sitemap-blog.xml</span></code>。<a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Sitemap</span></code></a> 类和 <code class=\"docutils literal notranslate\"><span class=\"pre\">sitemaps</span></code> 字典完全没有变化。</p>\n<p>如果所有站点地图都具有由 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.get_latest_lastmod\" title=\"django.contrib.sitemaps.Sitemap.get_latest_lastmod\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Sitemap.get_latest_lastmod()</span></code></a> 返回的 <code class=\"docutils literal notranslate\"><span class=\"pre\">lastmod</span></code>，则站点地图索引将具有与最新的 <code class=\"docutils literal notranslate\"><span class=\"pre\">lastmod</span></code> 相同的 <code class=\"docutils literal notranslate\"><span class=\"pre\">Last-Modified</span></code> 头。</p>\n<p>如果你的一个网站地图有超过 50,000 个 URL，你应该创建一个索引文件。在这种情况下，Django 会自动对网站地图进行分页，索引也会反映出来。</p>\n<p>如果你没有使用普通的站点地图视图——例如，如果它是用缓存装饰器包装的——你必须为你的站点地图视图命名，并将 <code class=\"docutils literal notranslate\"><span class=\"pre\">sitemap_url_name</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.contrib.sitemaps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span> <span class=\"k\">as</span> <span class=\"n\">sitemaps_views</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.decorators.cache</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">cache_page</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;sitemap.xml&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">cache_page</span><span class=\"p\">(</span><span class=\"mi\">86400</span><span class=\"p\">)(</span><span class=\"n\">sitemaps_views</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">),</span>\n        <span class=\"p\">{</span><span class=\"s2\">&quot;sitemaps&quot;</span><span class=\"p\">:</span> <span class=\"n\">sitemaps</span><span class=\"p\">,</span> <span class=\"s2\">&quot;sitemap_url_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;sitemaps&quot;</span><span class=\"p\">},</span>\n    <span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;sitemap-&lt;section&gt;.xml&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">cache_page</span><span class=\"p\">(</span><span class=\"mi\">86400</span><span class=\"p\">)(</span><span class=\"n\">sitemaps_views</span><span class=\"o\">.</span><span class=\"n\">sitemap</span><span class=\"p\">),</span>\n        <span class=\"p\">{</span><span class=\"s2\">&quot;sitemaps&quot;</span><span class=\"p\">:</span> <span class=\"n\">sitemaps</span><span class=\"p\">},</span>\n        <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;sitemaps&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"4.1\">\n<p class=\"version-note-title\">Changed in Django 4.1</p><p>已添加对 <code class=\"docutils literal notranslate\"><span class=\"pre\">Last-Modified</span></code> 头的使用。</p>\n</aside>\n</section>\n<section id=\"template-customization\">\n<h2>自定义模板<a class=\"heading-anchor\" href=\"#template-customization\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>如果你希望为网站上的每个站点地图或站点地图索引使用不同的模板，你可以通过 URLconf 向 <code class=\"docutils literal notranslate\"><span class=\"pre\">sitemap</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> 视图传递一个 <code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</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.contrib.sitemaps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;custom-sitemap.xml&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">,</span>\n        <span class=\"p\">{</span><span class=\"s2\">&quot;sitemaps&quot;</span><span class=\"p\">:</span> <span class=\"n\">sitemaps</span><span class=\"p\">,</span> <span class=\"s2\">&quot;template_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;custom_sitemap.html&quot;</span><span class=\"p\">},</span>\n        <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;django.contrib.sitemaps.views.index&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;custom-sitemap-&lt;section&gt;.xml&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">sitemap</span><span class=\"p\">,</span>\n        <span class=\"p\">{</span><span class=\"s2\">&quot;sitemaps&quot;</span><span class=\"p\">:</span> <span class=\"n\">sitemaps</span><span class=\"p\">,</span> <span class=\"s2\">&quot;template_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;custom_sitemap.html&quot;</span><span class=\"p\">},</span>\n        <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;django.contrib.sitemaps.views.sitemap&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>这些视图返回 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/template-response/#django.template.response.TemplateResponse\" title=\"django.template.response.TemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></code></a> 实例，允许你在渲染前轻松定制响应数据。更多细节，请看 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/template-response/\"><span class=\"doc\">TemplateResponse 文档</span></a>。</p>\n<section id=\"context-variables\">\n<h3>上下文变量<a class=\"heading-anchor\" href=\"#context-variables\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>在自定义 <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\"><span class=\"pre\">index()</span></code></a> 和 <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\"><span class=\"pre\">sitemap()</span></code></a> 视图的模板时，可以依赖以下上下文变量。</p>\n</section>\n<section id=\"index\">\n<span id=\"sitemap-index-context-variables\"></span><h3>索引<a class=\"heading-anchor\" href=\"#index\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>变量 <code class=\"docutils literal notranslate\"><span class=\"pre\">sitemaps</span></code> 是一个包含每个站点地图的 <code class=\"docutils literal notranslate\"><span class=\"pre\">location</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">lastmod</span></code> 属性的对象列表。每个 URL 具有以下属性：</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">location</span></code>：站点地图的位置（URL 和页面）。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">lastmod</span></code>：由每个站点地图的 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.get_latest_lastmod\" title=\"django.contrib.sitemaps.Sitemap.get_latest_lastmod\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_latest_lastmod()</span></code></a> 方法填充。</p></li>\n</ul>\n<aside class=\"version-note version-changed\" data-version=\"4.1\">\n<p class=\"version-note-title\">Changed in Django 4.1</p><p>上下文已更改为一个包含 <code class=\"docutils literal notranslate\"><span class=\"pre\">location</span></code> 和可选的 <code class=\"docutils literal notranslate\"><span class=\"pre\">lastmod</span></code> 属性的对象列表。</p>\n</aside>\n</section>\n<section id=\"id1\">\n<h3>Sitemap<a class=\"heading-anchor\" href=\"#id1\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>变量 <code class=\"docutils literal notranslate\"><span class=\"pre\">urlset</span></code> 是一个应该出现在站点地图中的 URL 列表，每个 URL 都会暴露出 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap\" title=\"django.contrib.sitemaps.Sitemap\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Sitemap</span></code></a> 类中定义的属性。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">alternates</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">changefreq</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">lastmod</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">location</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">priority</span></code></p></li>\n</ul>\n<p>当 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.i18n\" title=\"django.contrib.sitemaps.Sitemap.i18n\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">i18n</span></code></a> 和 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.alternates\" title=\"django.contrib.sitemaps.Sitemap.alternates\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">alternates</span></code></a> 被启用时，<code class=\"docutils literal notranslate\"><span class=\"pre\">alternates</span></code> 属性可用。它是一个其他语言版本的列表，包括可选的 <a class=\"reference internal\" href=\"#django.contrib.sitemaps.Sitemap.x_default\" title=\"django.contrib.sitemaps.Sitemap.x_default\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">x_default</span></code></a> 回退，对于每个 URL。每个候补是一个字典，有 <code class=\"docutils literal notranslate\"><span class=\"pre\">location</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">lang_code</span></code> 键。</p>\n<p>为每个 URL 添加了 <code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code> 属性，以便更灵活地定制模板，如 <a class=\"reference external\" href=\"https://support.google.com/news/publisher-center/answer/9606710\">Google news sitemaps</a> 。假设 Sitemap 的 <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\"><span class=\"pre\">items()</span></code></a> 会返回一个带有 <code class=\"docutils literal notranslate\"><span class=\"pre\">publication_data</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">tags</span></code> 字段的项目列表，类似这样就可以生成一个 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=\"w\">  </span><span class=\"na\">xmlns=</span><span class=\"s\">&quot;https://www.sitemaps.org/schemas/sitemap/0.9&quot;</span>\n<span class=\"w\">  </span><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=\"w\">  </span><span class=\"nt\">&lt;url&gt;</span>\n<span class=\"w\">    </span><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=\"w\">    </span><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=\"w\">    </span><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=\"w\">    </span><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=\"w\">    </span><span class=\"nt\">&lt;news:news&gt;</span>\n<span class=\"w\">      </span><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=\"w\">      </span><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=\"w\">    </span><span class=\"nt\">&lt;/news:news&gt;</span>\n<span class=\"w\">   </span><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>通知谷歌<a class=\"heading-anchor\" href=\"#pinging-google\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>当你的网站地图发生变化时，你可能想“ping”一下谷歌，让它知道要重新索引你的网站。站点地图框架提供了一个函数来实现这个功能： <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\"><span class=\"pre\">django.contrib.sitemaps.ping_google()</span></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\"><span class=\"pre\">ping_google</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">sitemap_url</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">ping_url</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">PING_URL</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">sitemap_uses_https</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.sitemaps.ping_google\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ping_google</span></code> 接受这些可选的参数：</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sitemap_url</span></code> - 网站地图的绝对路径（例如：<code class=\"file docutils literal notranslate\"><span class=\"pre\">'/sitemap.xml'</span></code> ）。</p>\n<p>如果没有提供这个参数，<code class=\"docutils literal notranslate\"><span class=\"pre\">ping_google</span></code> 将在你的 URLconf 中进行反向查找，查找名为 <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.sitemaps.views.index'</span></code> 的 URL，然后是 <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>'django.contrib.sitemaps.views.sitemap'<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>（无需其他参数）来自动确定网站地图 URL。</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ping_url</span></code> - 默认为谷歌的 Ping 工具：<a class=\"reference external\" href=\"https://www.google.com/webmasters/tools/ping\">https://www.google.com/webmasters/tools/ping</a>。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sitemap_uses_https</span></code> - 如果你的网站使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">http</span></code> 而不是 <code class=\"docutils literal notranslate\"><span class=\"pre\">https</span></code>，设置为 <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>。</p></li>\n</ul>\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\"><span class=\"pre\">ping_google()</span></code></a> 如果不能确定你的站点地图 URL，会引发异常 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.sitemaps.SitemapNotFound</span></code>。</p>\n</dd></dl>\n\n<aside class=\"admonition-register-with-google-first admonition\">\n<p class=\"admonition-title\">首先向谷歌注册！</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\"><span class=\"pre\">ping_google()</span></code></a> 命令只有在你在 <a class=\"reference external\" href=\"https://search.google.com/search-console/welcome\">Google Search Console</a> 注册了你的网站时才有效。</p>\n</aside>\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\"><span class=\"pre\">ping_google()</span></code></a> 的一个有用的方法是在模型的 <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</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.contrib.sitemaps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ping_google</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Entry</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">force_insert</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">force_update</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">force_insert</span><span class=\"p\">,</span> <span class=\"n\">force_update</span><span class=\"p\">)</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">ping_google</span><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>然而，一个更有效的解决方案是在定时脚本中调用 <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\"><span class=\"pre\">ping_google()</span></code></a>，或者其他一些预定任务。该函数向谷歌的服务器发出 HTTP 请求，所以你可能不想在每次调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> 时引入网络开销。</p>\n<section id=\"pinging-google-via-manage-py\">\n<h3>通过 <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span></code> 通知谷歌<a class=\"heading-anchor\" href=\"#pinging-google-via-manage-py\"><span class=\"visually-hidden\">Link to this heading</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\"><span class=\"pre\">django-admin</span> <span class=\"pre\">ping_google</span> <span class=\"pre\">[sitemap_url]</span></span><a class=\"heading-anchor\" href=\"#django-admin-ping_google\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>一旦将站点地图应用程序添加到您的项目中，您还可以使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">ping_google</span></code> 管理命令来通知 Google：</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>ping_google<span class=\"w\"> </span><span class=\"o\">[</span>/sitemap.xml<span class=\"o\">]</span>\n</code></pre></div>\n<dl class=\"django-admin-option\">\n<dt class=\"sig sig-object\" id=\"cmdoption-ping_google-sitemap-uses-http\">\n<span class=\"sig-name descname\"><span class=\"pre\">--sitemap-uses-http</span></span><span class=\"sig-prename descclassname\"></span><a class=\"heading-anchor\" href=\"#cmdoption-ping_google-sitemap-uses-http\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>如果你的网站地图使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">http</span></code> 而不是 <code class=\"docutils literal notranslate\"><span class=\"pre\">https</span></code>，请使用这个选项。</p>\n</section>\n</section>","rootId":"module-django.contrib.sitemaps","toc":[{"title":"概况","anchor":"overview","children":[]},{"title":"安装","anchor":"installation","children":[]},{"title":"初始化","anchor":"initialization","children":[]},{"title":"Sitemap 类","anchor":"sitemap-classes","children":[]},{"title":"一个例子","anchor":"an-example","children":[]},{"title":"Sitemap 类参考","anchor":"sitemap-class-reference","children":[]},{"title":"捷径","anchor":"shortcuts","children":[{"title":"例如","anchor":"example","children":[]}]},{"title":"静态视图的站点地图","anchor":"sitemap-for-static-views","children":[]},{"title":"创建站点地图索引","anchor":"creating-a-sitemap-index","children":[]},{"title":"自定义模板","anchor":"template-customization","children":[{"title":"上下文变量","anchor":"context-variables","children":[]},{"title":"索引","anchor":"index","children":[]},{"title":"Sitemap","anchor":"id1","children":[]}]},{"title":"通知谷歌","anchor":"pinging-google","children":[{"title":"通过 manage.py 通知谷歌","anchor":"pinging-google-via-manage-py","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/4.2/ref/"},{"docname":"ref/contrib/index","title":"contrib 包","url":"/zh-hans/4.2/ref/contrib/"}],"prev":{"docname":"ref/contrib/redirects","title":"重定向应用","url":"/zh-hans/4.2/ref/contrib/redirects/"},"next":{"docname":"ref/contrib/sites","title":"“站点”框架","url":"/zh-hans/4.2/ref/contrib/sites/"},"formats":{"html":"/zh-hans/4.2/ref/contrib/sitemaps/","markdown":"/zh-hans/4.2/ref/contrib/sitemaps.md","json":"/zh-hans/4.2/ref/contrib/sitemaps.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/ref/contrib/sitemaps.txt","official":"https://docs.djangoproject.com/zh-hans/4.2/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"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}