{"title":"简单页面应用","version":"6.0","locale":"zh-hans","docname":"ref/contrib/flatpages","url":"/zh-hans/6.0/ref/contrib/flatpages/","canonical":"https://djangodocs.dev/zh-hans/6.0/ref/contrib/flatpages/","summary":"Django 自带一个可选的“简单页面”应用程序。它可以让你在数据库中存储“简单”的 HTML 内容，并通过 Django 的管理界面和 Python API 为你处理管理。 Flatpage 是一个具有 URL、标题和内容的对象。您可以将其用于一次性、特殊情况的页面，比如您希望将其存储在数据库中，但又不想开发一个定制的…","html":"<span id=\"the-flatpages-app\"></span><h1>简单页面应用<a class=\"heading-anchor\" href=\"#module-django.contrib.flatpages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django 自带一个可选的“简单页面”应用程序。它可以让你在数据库中存储“简单”的 HTML 内容，并通过 Django 的管理界面和 Python API 为你处理管理。</p>\n<p>Flatpage 是一个具有 URL、标题和内容的对象。您可以将其用于一次性、特殊情况的页面，比如您希望将其存储在数据库中，但又不想开发一个定制的 Django 应用程序的页面，比如 &quot;关于我们&quot; 或 &quot;隐私政策&quot; 页面。</p>\n<p>一个简单页面可以使用自定义模板，也可以使用系统默认的简单页面模板。它可以与一个或多个网站关联。</p>\n<p>如果你想把你的内容放在一个自定义模板中，内容字段可以选择留空。</p>\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\">\n<li><p>安装 <a class=\"reference internal\" href=\"/zh-hans/6.0/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\">站点框架</code></a>，在 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> 设置中添加 <code class=\"docutils literal notranslate\">'django.contrib.sites'</code>，如果还没有的话。</p>\n<p>Also make sure you've correctly set <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-SITE_ID\"><code class=\"xref std std-setting docutils literal notranslate\">SITE_ID</code></a> to the ID of the\nsite the settings file represents. This will usually be <code class=\"docutils literal notranslate\">1</code> (i.e.\n<code class=\"docutils literal notranslate\">SITE_ID = 1</code>), but if you're using the sites framework to manage\nmultiple sites, it could be the ID of a different site.</p>\n</li>\n<li><p>将 <code class=\"docutils literal notranslate\">'django.contrib.flatpages'</code> 添加到你的 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> 配置中。</p></li>\n</ol>\n<p>那么无论是：</p>\n<ol class=\"arabic\" start=\"3\">\n<li><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>urlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;pages/&quot;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s2\">&quot;django.contrib.flatpages.urls&quot;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</li>\n</ol>\n<p>或：</p>\n<ol class=\"arabic simple\" start=\"3\">\n<li><p>将 <code class=\"docutils literal notranslate\">'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'</code> 添加到你的 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE</code></a> 配置中。</p></li>\n<li><p>运行命令 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">manage.py migrate</code></a>。</p></li>\n</ol>\n</section>\n<section id=\"how-it-works\">\n<h2>工作方式<a class=\"heading-anchor\" href=\"#how-it-works\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><code class=\"docutils literal notranslate\">manage.py migrate</code> 在数据库中创建两个表。<code class=\"docutils literal notranslate\">django_flatpage</code> 和 <code class=\"docutils literal notranslate\">django_flatpage_sites</code>。<code class=\"docutils literal notranslate\">django_flatpage</code> 是一个查找表，将一个 URL 映射到标题和一堆文本内容。<code class=\"docutils literal notranslate\">django_flatpage_sites</code> 将一个简单页面与一个网站关联起来。</p>\n<section id=\"using-the-urlconf\">\n<h3>使用 URLconf<a class=\"heading-anchor\" href=\"#using-the-urlconf\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>There are several ways to include the flatpages in your URLconf. You can\ndedicate a particular path to flatpages:</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>urlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;pages/&quot;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s2\">&quot;django.contrib.flatpages.urls&quot;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>你也可以把它设置成一个“catchall”模式。在这种情况下，重要的是将该模式放在其他 urlpatterns 的最后：</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.flatpages</span> <span class=\"kn\">import</span> views\n\n<span class=\"c1\"># Your other patterns here</span>\nurlpatterns <span class=\"o\">+=</span> <span class=\"p\">[</span>\n    re_path<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^(?P&lt;url&gt;.*/)$&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>flatpage<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>如果你将 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\">APPEND_SLASH</code></a> 设置为 <code class=\"docutils literal notranslate\">False</code>，你必须删除 catchall 模式中的斜杠，否则没有尾部斜杠的简单页面将不会被匹配。</p>\n</aside>\n<p>Another common setup is to use flatpages for a limited set of known pages and\nto hardcode their URLs in the <a class=\"reference internal\" href=\"/zh-hans/6.0/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=\"nn\">django.contrib.flatpages</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">+=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;about-us/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>flatpage<span class=\"p\">,</span> kwargs<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;url&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;/about-us/&quot;</span><span class=\"p\">},</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;about&quot;</span><span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;license/&quot;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>flatpage<span class=\"p\">,</span> kwargs<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;url&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;/license/&quot;</span><span class=\"p\">},</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;license&quot;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>The <code class=\"docutils literal notranslate\">kwargs</code> argument sets the <code class=\"docutils literal notranslate\">url</code> value used for the <code class=\"docutils literal notranslate\">FlatPage</code> model\nlookup in the flatpage view.</p>\n<p>The <code class=\"docutils literal notranslate\">name</code> argument allows the URL to be reversed in templates, for example\nusing the <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/templates/builtins/#std-templatetag-url\"><code class=\"xref std std-ttag docutils literal notranslate\">url</code></a> template tag.</p>\n</section>\n<section id=\"using-the-middleware\">\n<h3>使用中间件<a class=\"heading-anchor\" href=\"#using-the-middleware\"><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.flatpages.middleware.FlatpageFallbackMiddleware\" title=\"django.contrib.flatpages.middleware.FlatpageFallbackMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">FlatpageFallbackMiddleware</code></a> 可以完成所有的工作。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.flatpages.middleware.FlatpageFallbackMiddleware\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">FlatpageFallbackMiddleware</span><a class=\"heading-anchor\" href=\"#django.contrib.flatpages.middleware.FlatpageFallbackMiddleware\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>每当任何 Django 应用出现 404 错误时，这个中间件都会检查简单页面数据库中所请求的 URL，作为最后的手段。具体来说，它检查给定 URL 的简单页面，其网站 ID 对应于:setting:SITE_ID 配置。</p>\n<p>如果它找到了一个匹配，就按照这个算法：</p>\n<ul class=\"simple\">\n<li><p>如果简单页面有自定义模板，它就加载该模板。否则，它会加载模板 <code class=\"file docutils literal notranslate\">flatpages/default.html</code>。</p></li>\n<li><p>它给该模板传递了一个上下文变量 <code class=\"docutils literal notranslate\">flatpage</code>，也就是简单页面对象。它使用 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\">RequestContext</code></a> 来渲染模板。</p></li>\n</ul>\n<p>如果产生的 URL 指向有效的简单页面，中间件只会添加尾部的斜线和重定向（通过查看 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\">APPEND_SLASH</code></a> 配置）。重定向是永久性的（301 状态码）。</p>\n<p>如果没有找到匹配的请求，则继续照常处理。</p>\n<p>中间件只有在 404 时才会被激活——而不是 500 或任何其他状态码的响应。</p>\n</dd></dl>\n\n<aside class=\"admonition-flatpages-will-not-apply-view-middleware admonition\" role=\"note\">\n<p class=\"admonition-title\">简单页面不会应用视图中间件</p>\n<p>因为 <code class=\"docutils literal notranslate\">FlatpageFallbackMiddleware</code> 只有在 URL 解析失败并产生 404 之后才会应用，所以它返回的响应不会应用任何 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/http/middleware/#view-middleware\"><span class=\"std std-ref\">视图中间件</span></a> 方法。只有通过正常 URL 解析成功路由到视图的请求才会应用视图中间件。</p>\n</aside>\n<p>注意 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE</code></a> 的顺序很重要。一般来说，你可以把 <a class=\"reference internal\" href=\"#django.contrib.flatpages.middleware.FlatpageFallbackMiddleware\" title=\"django.contrib.flatpages.middleware.FlatpageFallbackMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">FlatpageFallbackMiddleware</code></a> 放在列表的最后。这意味着它将在处理响应时首先运行，并确保任何其他响应处理中间件看到的是真正的简单页面响应而不是 404。</p>\n<p>关于中间件的更多内容，请阅读 <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/http/middleware/\"><span class=\"doc\">中间件文档</span></a>。</p>\n<aside class=\"admonition-ensure-that-your-404-template-works admonition\" role=\"note\">\n<p class=\"admonition-title\">确保你的 404 模板工作</p>\n<p>Note that the\n<a class=\"reference internal\" href=\"#django.contrib.flatpages.middleware.FlatpageFallbackMiddleware\" title=\"django.contrib.flatpages.middleware.FlatpageFallbackMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">FlatpageFallbackMiddleware</code></a>\nonly steps in once another view has successfully produced a 404 response.\nIf another view or middleware class attempts to produce a 404 but ends up\nraising an exception instead, the response will become an HTTP 500\n(&quot;Internal Server Error&quot;) and the\n<a class=\"reference internal\" href=\"#django.contrib.flatpages.middleware.FlatpageFallbackMiddleware\" title=\"django.contrib.flatpages.middleware.FlatpageFallbackMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">FlatpageFallbackMiddleware</code></a>\nwill not attempt to serve a flatpage.</p>\n</aside>\n</section>\n</section>\n<section id=\"how-to-add-change-and-delete-flatpages\">\n<h2>如何添加、更改和删除简单页面<a class=\"heading-anchor\" href=\"#how-to-add-change-and-delete-flatpages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>应该将添加或编辑 flatpages 的权限限制在受信任的用户上。Flatpages 是由原始 HTML 定义的，<strong>不会被 Django 进行清理</strong>。因此，恶意的 flatpage 可能会导致各种安全漏洞，包括权限升级。</p>\n</aside>\n<section id=\"via-the-admin-interface\">\n<span id=\"flatpages-admin\"></span><h3>通过管理界面<a class=\"heading-anchor\" href=\"#via-the-admin-interface\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>如果你已经激活了 Django 的自动管理界面，你应该会在管理索引页上看到一个“简单页面”栏目。编辑简单页面就像编辑系统中的其他对象一样。</p>\n<p><code class=\"docutils literal notranslate\">FlatPage</code> 模型有一个 <code class=\"docutils literal notranslate\">enable_comments</code> 字段，<code class=\"docutils literal notranslate\">contrib.flatpages</code> 没有使用，但对你的项目或第三方应用程序可能有用。它不会出现在管理界面中，但你可以通过为 <code class=\"docutils literal notranslate\">FlatPage</code> 注册一个自定义的 <code class=\"docutils literal notranslate\">ModelAdmin</code> 来添加它：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.flatpages.admin</span> <span class=\"kn\">import</span> FlatPageAdmin\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.flatpages.models</span> <span class=\"kn\">import</span> FlatPage\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.translation</span> <span class=\"kn\">import</span> gettext_lazy <span class=\"k\">as</span> _\n\n\n<span class=\"c1\"># Define a new FlatPageAdmin</span>\n<span class=\"k\">class</span> <span class=\"nc\">FlatPageAdmin</span><span class=\"p\">(</span>FlatPageAdmin<span class=\"p\">):</span>\n    fieldsets <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;url&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;title&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;content&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;sites&quot;</span><span class=\"p\">]}),</span>\n        <span class=\"p\">(</span>\n            _<span class=\"p\">(</span><span class=\"s2\">&quot;Advanced options&quot;</span><span class=\"p\">),</span>\n            <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;collapse&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n                    <span class=\"s2\">&quot;enable_comments&quot;</span><span class=\"p\">,</span>\n                    <span class=\"s2\">&quot;registration_required&quot;</span><span class=\"p\">,</span>\n                    <span class=\"s2\">&quot;template_name&quot;</span><span class=\"p\">,</span>\n                <span class=\"p\">],</span>\n            <span class=\"p\">},</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n\n\n<span class=\"c1\"># Re-register FlatPageAdmin</span>\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>unregister<span class=\"p\">(</span>FlatPage<span class=\"p\">)</span>\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>FlatPage<span class=\"p\">,</span> FlatPageAdmin<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"via-the-python-api\">\n<h3>通过 Python API<a class=\"heading-anchor\" href=\"#via-the-python-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Flatpages are represented by a standard\n<a class=\"reference internal\" href=\"/zh-hans/6.0/topics/db/models/\"><span class=\"doc\">Django model</span></a>, <a class=\"reference internal\" href=\"#django.contrib.flatpages.models.FlatPage\" title=\"django.contrib.flatpages.models.FlatPage\"><code class=\"xref py py-class docutils literal notranslate\">FlatPage</code></a>. You can access\nflatpage objects via the <a class=\"reference internal\" href=\"/zh-hans/6.0/topics/db/queries/\"><span class=\"doc\">Django database API</span></a>.</p>\n<aside class=\"admonition-check-for-duplicate-flatpage-urls admonition\" role=\"note\">\n<p class=\"admonition-title\">检查是否有重复的简单页面网址。</p>\n<p>如果你通过自己的代码来添加或修改简单页面，你很可能要检查同一站点内是否有重复的简单页面 URL。管理中使用的简单页面表单可以执行这种验证检查，可以从 <code class=\"docutils literal notranslate\">django.contrib.flatpages.forms.FlatpageForm</code> 中导入，并在你自己的视图中使用。</p>\n</aside>\n</section>\n</section>\n<section id=\"flatpage-model\">\n<h2><code class=\"docutils literal notranslate\">FlatPage</code> model<a class=\"heading-anchor\" href=\"#flatpage-model\"><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.flatpages.models.FlatPage\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">models.</span><span class=\"sig-name descname\">FlatPage</span><a class=\"heading-anchor\" href=\"#django.contrib.flatpages.models.FlatPage\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<section id=\"fields\">\n<h3>字段<a class=\"heading-anchor\" href=\"#fields\"><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.flatpages.models.FlatPage\" title=\"django.contrib.flatpages.models.FlatPage\"><code class=\"xref py py-class docutils literal notranslate\">FlatPage</code></a> objects have the following\nfields:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">models.</span><span class=\"sig-name descname\">FlatPage</span></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.flatpages.models.FlatPage.url\">\n<span class=\"sig-name descname\">url</span><a class=\"heading-anchor\" href=\"#django.contrib.flatpages.models.FlatPage.url\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Required. 100 characters or fewer. Indexed for faster lookups.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.flatpages.models.FlatPage.title\">\n<span class=\"sig-name descname\">title</span><a class=\"heading-anchor\" href=\"#django.contrib.flatpages.models.FlatPage.title\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Required. 200 characters or fewer.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.flatpages.models.FlatPage.content\">\n<span class=\"sig-name descname\">content</span><a class=\"heading-anchor\" href=\"#django.contrib.flatpages.models.FlatPage.content\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Optional (<a class=\"reference internal\" href=\"/zh-hans/6.0/ref/models/fields/#django.db.models.Field.blank\" title=\"django.db.models.Field.blank\"><code class=\"xref py py-attr docutils literal notranslate\">blank=True</code></a>).\n<a class=\"reference internal\" href=\"/zh-hans/6.0/ref/models/fields/#django.db.models.TextField\" title=\"django.db.models.TextField\"><code class=\"xref py py-class docutils literal notranslate\">TextField</code></a> that typically, contains the HTML\ncontent of the page.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.flatpages.models.FlatPage.enable_comments\">\n<span class=\"sig-name descname\">enable_comments</span><a class=\"heading-anchor\" href=\"#django.contrib.flatpages.models.FlatPage.enable_comments\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Boolean. This field is not used by <a class=\"reference internal\" href=\"#module-django.contrib.flatpages\" title=\"django.contrib.flatpages: A framework for managing &quot;flat&quot; HTML content in a database.\"><code class=\"xref py py-mod docutils literal notranslate\">flatpages</code></a> by\ndefault and does not appear in the admin interface. Please see\n<a class=\"reference internal\" href=\"#flatpages-admin\"><span class=\"std std-ref\">flatpages admin interface section</span></a> for a\ndetailed explanation.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.flatpages.models.FlatPage.template_name\">\n<span class=\"sig-name descname\">template_name</span><a class=\"heading-anchor\" href=\"#django.contrib.flatpages.models.FlatPage.template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Optional (<a class=\"reference internal\" href=\"/zh-hans/6.0/ref/models/fields/#django.db.models.Field.blank\" title=\"django.db.models.Field.blank\"><code class=\"xref py py-attr docutils literal notranslate\">blank=True</code></a>). 70\ncharacters or fewer. Specifies the template used to render the page.\nDefaults to <code class=\"file docutils literal notranslate\">flatpages/default.html</code> if not provided.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.flatpages.models.FlatPage.sites\">\n<span class=\"sig-name descname\">sites</span><a class=\"heading-anchor\" href=\"#django.contrib.flatpages.models.FlatPage.sites\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Many-to-many relationship to\n<a class=\"reference internal\" href=\"/zh-hans/6.0/ref/contrib/sites/#django.contrib.sites.models.Site\" title=\"django.contrib.sites.models.Site\"><code class=\"xref py py-class docutils literal notranslate\">Site</code></a>, which determines the\n<a class=\"reference internal\" href=\"/zh-hans/6.0/ref/contrib/sites/\"><span class=\"doc\">sites</span></a> the flatpage is available on.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"methods\">\n<h3>方法<a class=\"heading-anchor\" href=\"#methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">models.</span><span class=\"sig-name descname\">FlatPage</span></dt>\n<dd><dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.flatpages.models.FlatPage.get_absolute_url\">\n<span class=\"sig-name descname\">get_absolute_url</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.flatpages.models.FlatPage.get_absolute_url\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns the relative URL path of the page based on the\n<a class=\"reference internal\" href=\"#django.contrib.flatpages.models.FlatPage.url\" title=\"django.contrib.flatpages.models.FlatPage.url\"><code class=\"xref py py-attr docutils literal notranslate\">url</code></a> attribute.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n</section>\n<section id=\"flatpage-templates\">\n<h2>简单页面模板<a class=\"heading-anchor\" href=\"#flatpage-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>By default, flatpages are rendered via the template\n<code class=\"file docutils literal notranslate\">flatpages/default.html</code>, but you can override that for a particular\nflatpage: in the admin, a collapsed fieldset titled &quot;Advanced options&quot;\n(clicking will expand it) contains a field for specifying a template name. If\nyou're creating a flatpage via the Python API you can set the template name as\nthe field <code class=\"docutils literal notranslate\">template_name</code> on the <code class=\"docutils literal notranslate\">FlatPage</code> object.</p>\n<p>创建 <code class=\"file docutils literal notranslate\">flatpages/default.html</code> 模板是你的责任；在你的模板目录下，创建一个 <code class=\"file docutils literal notranslate\">flatpages</code> 目录，其中包含一个文件 <code class=\"file docutils literal notranslate\">default.html</code>。</p>\n<p>简单模板被传递一个单一的上下文变量 <code class=\"docutils literal notranslate\">flatpage</code>，也就是简单页面对象。</p>\n<p>下面是一个示例 <code class=\"file docutils literal notranslate\">flatpages/default.html</code> 模板：</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">&lt;!DOCTYPE html&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">html</span> <span class=\"na\">lang</span><span class=\"o\">=</span><span class=\"s\">&quot;en&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">flatpage.title</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">title</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">head</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{{</span> <span class=\"nv\">flatpage.content</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">body</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">html</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>由于你已经在管理页面中输入了原始 HTML，所以 <code class=\"docutils literal notranslate\">flatpage.title</code> 和 <code class=\"docutils literal notranslate\">flatpage.content</code> 都在模板中被标记为 <strong>不需要</strong> <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/templates/language/#automatic-html-escaping\"><span class=\"std std-ref\">自动 HTML 转义</span></a>。</p>\n</section>\n<section id=\"getting-a-list-of-flatpage-objects-in-your-templates\">\n<h2>获取模板中的 <a class=\"reference internal\" href=\"#django.contrib.flatpages.models.FlatPage\" title=\"django.contrib.flatpages.models.FlatPage\"><code class=\"xref py py-class docutils literal notranslate\">FlatPage</code></a> 对象列表<a class=\"heading-anchor\" href=\"#getting-a-list-of-flatpage-objects-in-your-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>简单页面应用提供了一个模板标签，允许你在 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/contrib/sites/#hooking-into-current-site-from-views\"><span class=\"std std-ref\">当前站点</span></a> 上迭代所有可用的简单应用。</p>\n<p>和所有的自定义模板标签一样，在使用它之前，你需要 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/templates/language/#loading-custom-template-libraries\"><span class=\"std std-ref\">加载其自定义标签库</span></a>。加载库后，你可以通过 <a class=\"reference internal\" href=\"#std-templatetag-get_flatpages\"><code class=\"xref std std-ttag docutils literal notranslate\">get_flatpages</code></a> 标签来检索当前所有的简单页面。</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">flatpages</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">get_flatpages</span> <span class=\"k\">as</span> <span class=\"nv\">flatpages</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">page</span> <span class=\"k\">in</span> <span class=\"nv\">flatpages</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">page.url</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">page.title</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<section id=\"displaying-registration-required-flatpages\">\n<span id=\"std-templatetag-get_flatpages\"></span><h3>显示 <code class=\"docutils literal notranslate\">registration_required</code> 简单页面<a class=\"heading-anchor\" href=\"#displaying-registration-required-flatpages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>默认情况下，<a class=\"reference internal\" href=\"#std-templatetag-get_flatpages\"><code class=\"xref std std-ttag docutils literal notranslate\">get_flatpages</code></a> 模板标签只显示标记为 <code class=\"docutils literal notranslate\">registration_required = False</code> 的页面。如果你想显示受注册保护的页面，你需要使用 <code class=\"docutils literal notranslate\">for</code> 子句指定一个经过认证的用户。</p>\n<p>例如：</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">get_flatpages</span> <span class=\"nv\">for</span> <span class=\"nv\">someuser</span> <span class=\"k\">as</span> <span class=\"nv\">about_pages</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>如果你提供了一个匿名用户， <a class=\"reference internal\" href=\"#std-templatetag-get_flatpages\"><code class=\"xref std std-ttag docutils literal notranslate\">get_flatpages</code></a> 将与你没有提供用户的行为相同——即，它将只向你显示公共的简单页面。</p>\n</section>\n<section id=\"limiting-flatpages-by-base-url\">\n<h3>通过基础 URL 限制简单页面<a class=\"heading-anchor\" href=\"#limiting-flatpages-by-base-url\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>一个可选的参数，<code class=\"docutils literal notranslate\">starts_with</code>，可以用来限制返回的页面以特定的基本 URL 开头。这个参数可以以字符串的形式传递，也可以以一个变量的形式从上下文中解析。</p>\n<p>例如：</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">get_flatpages</span> <span class=\"s1\">&#39;/about/&#39;</span> <span class=\"k\">as</span> <span class=\"nv\">about_pages</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">get_flatpages</span> <span class=\"nv\">about_prefix</span> <span class=\"k\">as</span> <span class=\"nv\">about_pages</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">get_flatpages</span> <span class=\"s1\">&#39;/about/&#39;</span> <span class=\"nv\">for</span> <span class=\"nv\">someuser</span> <span class=\"k\">as</span> <span class=\"nv\">about_pages</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"integrating-with-django-contrib-sitemaps\">\n<h2>与 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/contrib/sitemaps/#module-django.contrib.sitemaps\" title=\"django.contrib.sitemaps: A framework for generating Google sitemap XML files.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.sitemaps</code></a> 整合<a class=\"heading-anchor\" href=\"#integrating-with-django-contrib-sitemaps\"><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.flatpages.sitemaps.FlatPageSitemap\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">FlatPageSitemap</span><a class=\"heading-anchor\" href=\"#django.contrib.flatpages.sitemaps.FlatPageSitemap\"><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.flatpages.sitemaps.FlatPageSitemap\" title=\"django.contrib.flatpages.sitemaps.FlatPageSitemap\"><code class=\"xref py py-class docutils literal notranslate\">sitemaps.FlatPageSitemap</code></a> 类查看所有为当前 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/settings/#std-setting-SITE_ID\"><code class=\"xref std std-setting docutils literal notranslate\">SITE_ID</code></a> 定义的公开可见的 <a class=\"reference internal\" href=\"#module-django.contrib.flatpages\" title=\"django.contrib.flatpages: A framework for managing &quot;flat&quot; HTML content in a database.\"><code class=\"xref py py-mod docutils literal notranslate\">flatpages</code></a> （参见 <a class=\"reference internal\" href=\"/zh-hans/6.0/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\">站点文档</code></a>），并在站点地图中创建一个条目。这些条目只包括 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/contrib/sitemaps/#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=\"/zh-hans/6.0/ref/contrib/sitemaps/#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=\"/zh-hans/6.0/ref/contrib/sitemaps/#django.contrib.sitemaps.Sitemap.changefreq\" title=\"django.contrib.sitemaps.Sitemap.changefreq\"><code class=\"xref py py-attr docutils literal notranslate\">changefreq</code></a> 或 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/contrib/sitemaps/#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<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.flatpages.sitemaps.FlatPageSitemap\" title=\"django.contrib.flatpages.sitemaps.FlatPageSitemap\"><code class=\"xref py py-class docutils literal notranslate\">FlatPageSitemap</code></a> 的 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=\"nn\">django.contrib.flatpages.sitemaps</span> <span class=\"kn\">import</span> FlatPageSitemap\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\">django.urls</span> <span class=\"kn\">import</span> path\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"c1\"># the sitemap</span>\n    path<span class=\"p\">(</span>\n        <span class=\"s2\">&quot;sitemap.xml&quot;</span><span class=\"p\">,</span>\n        sitemap<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;flatpages&quot;</span><span class=\"p\">:</span> FlatPageSitemap<span class=\"p\">}},</span>\n        name<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>","rootId":"module-django.contrib.flatpages","toc":[{"title":"安装","anchor":"installation","children":[]},{"title":"工作方式","anchor":"how-it-works","children":[{"title":"使用 URLconf","anchor":"using-the-urlconf","children":[]},{"title":"使用中间件","anchor":"using-the-middleware","children":[]}]},{"title":"如何添加、更改和删除简单页面","anchor":"how-to-add-change-and-delete-flatpages","children":[{"title":"通过管理界面","anchor":"via-the-admin-interface","children":[]},{"title":"通过 Python API","anchor":"via-the-python-api","children":[]}]},{"title":"FlatPage model","anchor":"flatpage-model","children":[{"title":"字段","anchor":"fields","children":[]},{"title":"方法","anchor":"methods","children":[]}]},{"title":"简单页面模板","anchor":"flatpage-templates","children":[]},{"title":"获取模板中的 FlatPage 对象列表","anchor":"getting-a-list-of-flatpage-objects-in-your-templates","children":[{"title":"显示 registration_required 简单页面","anchor":"displaying-registration-required-flatpages","children":[]},{"title":"通过基础 URL 限制简单页面","anchor":"limiting-flatpages-by-base-url","children":[]}]},{"title":"与 django.contrib.sitemaps 整合","anchor":"integrating-with-django-contrib-sitemaps","children":[{"title":"例如","anchor":"example","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/6.0/ref/"},{"docname":"ref/contrib/index","title":"contrib 包","url":"/zh-hans/6.0/ref/contrib/"}],"prev":{"docname":"ref/contrib/contenttypes","title":"内容类型框架","url":"/zh-hans/6.0/ref/contrib/contenttypes/"},"next":{"docname":"ref/contrib/gis/index","title":"GeoDjango","url":"/zh-hans/6.0/ref/contrib/gis/"},"formats":{"html":"/zh-hans/6.0/ref/contrib/flatpages/","markdown":"/zh-hans/6.0/ref/contrib/flatpages.md","json":"/zh-hans/6.0/ref/contrib/flatpages.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/contrib/flatpages.txt","official":"https://docs.djangoproject.com/zh-hans/6.0/ref/contrib/flatpages/","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","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}