{"title":"The flatpages app","version":"1.11","locale":"pl","docname":"ref/contrib/flatpages","url":"/pl/1.11/ref/contrib/flatpages/","canonical":"https://djangodocs.dev/pl/1.11/ref/contrib/flatpages/","summary":"Django comes with an optional „flatpages” application. It lets you store simple „flat” HTML content in a database and handles the management for you via Django’s…","html":"<span id=\"the-flatpages-app\"></span><h1>The flatpages app<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 comes with an optional „flatpages” application. It lets you store simple\n„flat” HTML content in a database and handles the management for you via\nDjango’s admin interface and a Python API.</p>\n<p>A flatpage is a simple object with a URL, title and content. Use it for\none-off, special-case pages, such as „About” or „Privacy Policy” pages, that\nyou want to store in a database but for which you don’t want to develop a\ncustom Django application.</p>\n<p>A flatpage can use a custom template or a default, systemwide flatpage\ntemplate. It can be associated with one, or multiple, sites.</p>\n<p>The content field may optionally be left blank if you prefer to put your\ncontent in a custom template.</p>\n<p>Here are some examples of flatpages on Django-powered sites:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"http://www.lawrence.com/about/contact/\">http://www.lawrence.com/about/contact/</a></p></li>\n<li><p><a class=\"reference external\" href=\"http://www2.ljworld.com/site/rules/\">http://www2.ljworld.com/site/rules/</a></p></li>\n</ul>\n<section id=\"installation\">\n<h2>Installation<a class=\"heading-anchor\" href=\"#installation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>To install the flatpages app, follow these steps:</p>\n<ol class=\"arabic\">\n<li><p>Install the <a class=\"reference internal\" href=\"/pl/1.11/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> by adding\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.sites'</span></code> to your <a class=\"reference internal\" href=\"/pl/1.11/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> setting,\nif it’s not already in there.</p>\n<p>Also make sure you’ve correctly set <a class=\"reference internal\" href=\"/pl/1.11/ref/settings/#std-setting-SITE_ID\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SITE_ID</span></code></a> to the ID of the\nsite the settings file represents. This will usually be <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> (i.e.\n<code class=\"docutils literal notranslate\"><span class=\"pre\">SITE_ID</span> <span class=\"pre\">=</span> <span class=\"pre\">1</span></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>Add <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.flatpages'</span></code> to your <a class=\"reference internal\" href=\"/pl/1.11/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>\nsetting.</p></li>\n</ol>\n<p>Then either:</p>\n<ol class=\"arabic\" start=\"3\">\n<li><p>Add an entry in your URLconf. For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^pages/&#39;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s1\">&#39;django.contrib.flatpages.urls&#39;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</li>\n</ol>\n<p>or:</p>\n<ol class=\"arabic simple\" start=\"3\">\n<li><p>Add <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'</span></code>\nto your <a class=\"reference internal\" href=\"/pl/1.11/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> setting.</p></li>\n<li><p>Run the command <a class=\"reference internal\" href=\"/pl/1.11/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">migrate</span></code></a>.</p></li>\n</ol>\n</section>\n<section id=\"how-it-works\">\n<h2>How it works<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\"><span class=\"pre\">manage.py</span> <span class=\"pre\">migrate</span></code> creates two tables in your database: <code class=\"docutils literal notranslate\"><span class=\"pre\">django_flatpage</span></code>\nand <code class=\"docutils literal notranslate\"><span class=\"pre\">django_flatpage_sites</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">django_flatpage</span></code> is a simple lookup table\nthat simply maps a URL to a title and bunch of text content.\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django_flatpage_sites</span></code> associates a flatpage with a site.</p>\n<section id=\"using-the-urlconf\">\n<h3>Using the 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 flat pages in your URLconf. You can\ndedicate a particular path to flat pages:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^pages/&#39;</span><span class=\"p\">,</span> <span class=\"n\">include</span><span class=\"p\">(</span><span class=\"s1\">&#39;django.contrib.flatpages.urls&#39;</span><span class=\"p\">)),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>You can also set it up as a „catchall” pattern. In this case, it is important\nto place the pattern at the end of the other 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=\"w\"> </span><span class=\"nn\">django.contrib.flatpages</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n\n<span class=\"c1\"># Your other patterns here</span>\n<span class=\"n\">urlpatterns</span> <span class=\"o\">+=</span> <span class=\"p\">[</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^(?P&lt;url&gt;.*/)$&#39;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">flatpage</span><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\">Ostrzeżenie</p>\n<p>If you set <a class=\"reference internal\" href=\"/pl/1.11/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APPEND_SLASH</span></code></a> to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, you must remove the slash\nin the catchall pattern or flatpages without a trailing slash will not be\nmatched.</p>\n</aside>\n<p>Another common setup is to use flat pages for a limited set of known pages and\nto hard code the urls, so you can reference them with the <a class=\"reference internal\" href=\"/pl/1.11/ref/templates/builtins/#std-templatetag-url\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">url</span></code></a> template\ntag:</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.flatpages</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\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^about-us/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">flatpage</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;url&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;/about-us/&#39;</span><span class=\"p\">},</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;about&#39;</span><span class=\"p\">),</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^license/$&#39;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">flatpage</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;url&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;/license/&#39;</span><span class=\"p\">},</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;license&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</section>\n<section id=\"using-the-middleware\">\n<h3>Using the middleware<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>The <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\"><span class=\"pre\">FlatpageFallbackMiddleware</span></code></a>\ncan do all of the work.</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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">FlatpageFallbackMiddleware</span></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>Each time any Django application raises a 404 error, this middleware\nchecks the flatpages database for the requested URL as a last resort.\nSpecifically, it checks for a flatpage with the given URL with a site ID\nthat corresponds to the <a class=\"reference internal\" href=\"/pl/1.11/ref/settings/#std-setting-SITE_ID\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SITE_ID</span></code></a> setting.</p>\n<p>If it finds a match, it follows this algorithm:</p>\n<ul class=\"simple\">\n<li><p>If the flatpage has a custom template, it loads that template.\nOtherwise, it loads the template <code class=\"file docutils literal notranslate\"><span class=\"pre\">flatpages/default.html</span></code>.</p></li>\n<li><p>It passes that template a single context variable, <code class=\"docutils literal notranslate\"><span class=\"pre\">flatpage</span></code>,\nwhich is the flatpage object. It uses\n<a class=\"reference internal\" href=\"/pl/1.11/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RequestContext</span></code></a> in rendering the\ntemplate.</p></li>\n</ul>\n<p>The middleware will only add a trailing slash and redirect (by looking\nat the <a class=\"reference internal\" href=\"/pl/1.11/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APPEND_SLASH</span></code></a> setting) if the resulting URL refers to\na valid flatpage. Redirects are permanent (301 status code).</p>\n<p>If it doesn’t find a match, the request continues to be processed as usual.</p>\n<p>The middleware only gets activated for 404s – not for 500s or responses\nof any other status code.</p>\n</dd></dl>\n\n<aside class=\"admonition-flatpages-will-not-apply-view-middleware admonition\">\n<p class=\"admonition-title\">Flatpages will not apply view middleware</p>\n<p>Because the <code class=\"docutils literal notranslate\"><span class=\"pre\">FlatpageFallbackMiddleware</span></code> is applied only after\nURL resolution has failed and produced a 404, the response it\nreturns will not apply any <a class=\"reference internal\" href=\"/pl/1.11/topics/http/middleware/#view-middleware\"><span class=\"std std-ref\">view middleware</span></a>\nmethods. Only requests which are successfully routed to a view via\nnormal URL resolution apply view middleware.</p>\n</aside>\n<p>Note that the order of <a class=\"reference internal\" href=\"/pl/1.11/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> matters. Generally, you can put\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\"><span class=\"pre\">FlatpageFallbackMiddleware</span></code></a> at the\nend of the list. This means it will run first when processing the response, and\nensures that any other response-processing middleware see the real flatpage\nresponse rather than the 404.</p>\n<p>For more on middleware, read the <a class=\"reference internal\" href=\"/pl/1.11/topics/http/middleware/\"><span class=\"doc\">middleware docs</span></a>.</p>\n<aside class=\"admonition-ensure-that-your-404-template-works admonition\">\n<p class=\"admonition-title\">Ensure that your 404 template works</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\"><span class=\"pre\">FlatpageFallbackMiddleware</span></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(„Internal Server Error”) 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\"><span class=\"pre\">FlatpageFallbackMiddleware</span></code></a>\nwill not attempt to serve a flat page.</p>\n</aside>\n</section>\n</section>\n<section id=\"how-to-add-change-and-delete-flatpages\">\n<h2>How to add, change and delete flatpages<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<section id=\"via-the-admin-interface\">\n<span id=\"flatpages-admin\"></span><h3>Via the admin interface<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>If you’ve activated the automatic Django admin interface, you should see a\n„Flatpages” section on the admin index page. Edit flatpages as you edit any\nother object in the system.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">FlatPage</span></code> model has an <code class=\"docutils literal notranslate\"><span class=\"pre\">enable_comments</span></code> field that isn’t used by\n<code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.flatpages</span></code>, but that could be useful for your project or third-party\napps. It doesn’t appear in the admin interface, but you can add it by\nregistering a custom <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> for <code class=\"docutils literal notranslate\"><span class=\"pre\">FlatPage</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</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.flatpages.admin</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">FlatPageAdmin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.flatpages.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">FlatPage</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ugettext_lazy</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n\n<span class=\"c1\"># Define a new FlatPageAdmin</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">FlatPageAdmin</span><span class=\"p\">(</span><span class=\"n\">FlatPageAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">fieldsets</span> <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=\"s1\">&#39;fields&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;url&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;content&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;sites&#39;</span><span class=\"p\">)}),</span>\n        <span class=\"p\">(</span><span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;Advanced options&#39;</span><span class=\"p\">),</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;classes&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;collapse&#39;</span><span class=\"p\">,</span> <span class=\"p\">),</span>\n            <span class=\"s1\">&#39;fields&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;enable_comments&#39;</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;registration_required&#39;</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;template_name&#39;</span><span class=\"p\">,</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">}),</span>\n    <span class=\"p\">)</span>\n\n<span class=\"c1\"># Re-register FlatPageAdmin</span>\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">unregister</span><span class=\"p\">(</span><span class=\"n\">FlatPage</span><span class=\"p\">)</span>\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">FlatPage</span><span class=\"p\">,</span> <span class=\"n\">FlatPageAdmin</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"via-the-python-api\">\n<h3>Via the 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<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.flatpages.models.FlatPage\">\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\">FlatPage</span></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><p>Flatpages are represented by a standard\n<a class=\"reference internal\" href=\"/pl/1.11/topics/db/models/\"><span class=\"doc\">Django model</span></a>,\nwhich lives in <a class=\"reference external\" href=\"https://github.com/django/django/blob/master/django/contrib/flatpages/models.py\">django/contrib/flatpages/models.py</a>. You can access\nflatpage objects via the <a class=\"reference internal\" href=\"/pl/1.11/topics/db/queries/\"><span class=\"doc\">Django database API</span></a>.</p>\n</dd></dl>\n\n<aside class=\"admonition-check-for-duplicate-flatpage-urls admonition\">\n<p class=\"admonition-title\">Check for duplicate flatpage URLs.</p>\n<p>If you add or modify flatpages via your own code, you will likely want to\ncheck for duplicate flatpage URLs within the same site. The flatpage form\nused in the admin performs this validation check, and can be imported from\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.flatpages.forms.FlatpageForm</span></code> and used in your own\nviews.</p>\n</aside>\n</section>\n</section>\n<section id=\"flatpage-templates\">\n<h2>Flatpage templates<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\"><span class=\"pre\">flatpages/default.html</span></code>, but you can override that for a\nparticular flatpage: in the admin, a collapsed fieldset titled\n„Advanced options” (clicking will expand it) contains a field for\nspecifying a template name. If you’re creating a flat page via the\nPython API you can simply set the template name as the field\n<code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code> on the <code class=\"docutils literal notranslate\"><span class=\"pre\">FlatPage</span></code> object.</p>\n<p>Creating the <code class=\"file docutils literal notranslate\"><span class=\"pre\">flatpages/default.html</span></code> template is your responsibility;\nin your template directory, just create a <code class=\"file docutils literal notranslate\"><span class=\"pre\">flatpages</span></code> directory\ncontaining a file <code class=\"file docutils literal notranslate\"><span class=\"pre\">default.html</span></code>.</p>\n<p>Flatpage templates are passed a single context variable, <code class=\"docutils literal notranslate\"><span class=\"pre\">flatpage</span></code>,\nwhich is the flatpage object.</p>\n<p>Here’s a sample <code class=\"file docutils literal notranslate\"><span class=\"pre\">flatpages/default.html</span></code> template:</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=\"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>Since you’re already entering raw HTML into the admin page for a flatpage,\nboth <code class=\"docutils literal notranslate\"><span class=\"pre\">flatpage.title</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">flatpage.content</span></code> are marked as <strong>not</strong>\nrequiring <a class=\"reference internal\" href=\"/pl/1.11/ref/templates/language/#automatic-html-escaping\"><span class=\"std std-ref\">automatic HTML escaping</span></a> in the\ntemplate.</p>\n</section>\n<section id=\"getting-a-list-of-flatpage-objects-in-your-templates\">\n<h2>Getting a list of <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\"><span class=\"pre\">FlatPage</span></code></a> objects in your templates<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>The flatpages app provides a template tag that allows you to iterate\nover all of the available flatpages on the <a class=\"reference internal\" href=\"/pl/1.11/ref/contrib/sites/#hooking-into-current-site-from-views\"><span class=\"std std-ref\">current site</span></a>.</p>\n<p>Like all custom template tags, you’ll need to <a class=\"reference internal\" href=\"/pl/1.11/ref/templates/language/#loading-custom-template-libraries\"><span class=\"std std-ref\">load its custom\ntag library</span></a> before you can use\nit. After loading the library, you can retrieve all current flatpages\nvia the <a class=\"reference internal\" href=\"#std-templatetag-get_flatpages\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">get_flatpages</span></code></a> tag:</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>Displaying <code class=\"docutils literal notranslate\"><span class=\"pre\">registration_required</span></code> flatpages<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>By default, the <a class=\"reference internal\" href=\"#std-templatetag-get_flatpages\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">get_flatpages</span></code></a> templatetag will only show\nflatpages that are marked <code class=\"docutils literal notranslate\"><span class=\"pre\">registration_required</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code>. If you\nwant to display registration-protected flatpages, you need to specify\nan authenticated user using a <code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></code> clause.</p>\n<p>For example:</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>If you provide an anonymous user, <a class=\"reference internal\" href=\"#std-templatetag-get_flatpages\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">get_flatpages</span></code></a> will behave\nthe same as if you hadn’t provided a user – i.e., it will only show you\npublic flatpages.</p>\n</section>\n<section id=\"limiting-flatpages-by-base-url\">\n<h3>Limiting flatpages by base 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>An optional argument, <code class=\"docutils literal notranslate\"><span class=\"pre\">starts_with</span></code>, can be applied to limit the\nreturned pages to those beginning with a particular base URL. This\nargument may be passed as a string, or as a variable to be resolved\nfrom the context.</p>\n<p>For example:</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>Integrating with <a class=\"reference internal\" href=\"/pl/1.11/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\"><span class=\"pre\">django.contrib.sitemaps</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">FlatPageSitemap</span></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>The <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\"><span class=\"pre\">sitemaps.FlatPageSitemap</span></code></a> class looks at all\npublicly visible <a class=\"reference internal\" href=\"#module-django.contrib.flatpages\" title=\"django.contrib.flatpages: A framework for managing simple ?flat? HTML content in a database.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">flatpages</span></code></a> defined for the current\n<a class=\"reference internal\" href=\"/pl/1.11/ref/settings/#std-setting-SITE_ID\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SITE_ID</span></code></a> (see the <a class=\"reference internal\" href=\"/pl/1.11/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\">documentation</span></code></a>) and creates an entry in the sitemap. These entries\ninclude only the <a class=\"reference internal\" href=\"/pl/1.11/ref/contrib/sitemaps/#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>\nattribute – not <a class=\"reference internal\" href=\"/pl/1.11/ref/contrib/sitemaps/#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>,\n<a class=\"reference internal\" href=\"/pl/1.11/ref/contrib/sitemaps/#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> or\n<a class=\"reference internal\" href=\"/pl/1.11/ref/contrib/sitemaps/#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<section id=\"example\">\n<h3>Example<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Here’s an example of a URLconf using <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\"><span class=\"pre\">FlatPageSitemap</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">url</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.flatpages.sitemaps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">FlatPageSitemap</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\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\"># ...</span>\n\n    <span class=\"c1\"># the sitemap</span>\n    <span class=\"n\">url</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^sitemap\\.xml$&#39;</span><span class=\"p\">,</span> <span class=\"n\">sitemap</span><span class=\"p\">,</span>\n        <span class=\"p\">{</span><span class=\"s1\">&#39;sitemaps&#39;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s1\">&#39;flatpages&#39;</span><span class=\"p\">:</span> <span class=\"n\">FlatPageSitemap</span><span class=\"p\">}},</span>\n        <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;django.contrib.sitemaps.views.sitemap&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</section>\n</section>","rootId":"module-django.contrib.flatpages","toc":[{"title":"Installation","anchor":"installation","children":[]},{"title":"How it works","anchor":"how-it-works","children":[{"title":"Using the URLconf","anchor":"using-the-urlconf","children":[]},{"title":"Using the middleware","anchor":"using-the-middleware","children":[]}]},{"title":"How to add, change and delete flatpages","anchor":"how-to-add-change-and-delete-flatpages","children":[{"title":"Via the admin interface","anchor":"via-the-admin-interface","children":[]},{"title":"Via the Python API","anchor":"via-the-python-api","children":[]}]},{"title":"Flatpage templates","anchor":"flatpage-templates","children":[]},{"title":"Getting a list of FlatPage objects in your templates","anchor":"getting-a-list-of-flatpage-objects-in-your-templates","children":[{"title":"Displaying registration_required flatpages","anchor":"displaying-registration-required-flatpages","children":[]},{"title":"Limiting flatpages by base URL","anchor":"limiting-flatpages-by-base-url","children":[]}]},{"title":"Integrating with django.contrib.sitemaps","anchor":"integrating-with-django-contrib-sitemaps","children":[{"title":"Example","anchor":"example","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API Reference","url":"/pl/1.11/ref/"},{"docname":"ref/contrib/index","title":"contrib packages","url":"/pl/1.11/ref/contrib/"}],"prev":{"docname":"ref/contrib/contenttypes","title":"The contenttypes framework","url":"/pl/1.11/ref/contrib/contenttypes/"},"next":{"docname":"ref/contrib/gis/index","title":"GeoDjango","url":"/pl/1.11/ref/contrib/gis/"},"formats":{"html":"/pl/1.11/ref/contrib/flatpages/","markdown":"/pl/1.11/ref/contrib/flatpages.md","json":"/pl/1.11/ref/contrib/flatpages.json"},"source":"https://github.com/django/django/blob/stable/1.11.x/docs/ref/contrib/flatpages.txt","official":"https://docs.djangoproject.com/pl/1.11/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","1.11","1.10"],"inLocales":["en","fr","ja","id","pt-br","ko","es","el","pl"]}