{"title":"フラットページ (flatpages) アプリ","version":"5.0","locale":"ja","docname":"ref/contrib/flatpages","url":"/ja/5.0/ref/contrib/flatpages/","canonical":"https://djangodocs.dev/ja/5.0/ref/contrib/flatpages/","summary":"Django にはオプションで \"flatpages\" アプリケーションが付属しています。これを使えば、\"フラットな\" HTML コンテンツをデータベースに保存することができ、 Django のadmin インタフェースや Python API を使って管理できます。…","html":"<span id=\"the-flatpages-app\"></span><h1>フラットページ (flatpages) アプリ<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 にはオプションで &quot;flatpages&quot; アプリケーションが付属しています。これを使えば、&quot;フラットな&quot; HTML コンテンツをデータベースに保存することができ、 Django のadmin インタフェースや Python API を使って管理できます。</p>\n<p>フラットページは、URL、タイトル、コンテンツを持つオブジェクトです。これは、 &quot;About&quot; や &quot;Privacy Policy&quot; などのワンオフの特別なページに使用します。データベースに保存する必要はあるが、カスタムのDjangoアプリを開発する必要がない場合に利用します。</p>\n<p>フラットページはカスタムテンプレートまたはデフォルトのシステム全体のフラットページテンプレートを使用できます。1 つまたは複数のサイトに関連付けることができます。</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>flatpages アプリをインストールするには、以下の手順に従ってください:</p>\n<ol class=\"arabic\">\n<li><p>もし設定にまだ含まれていない場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.sites'</span></code> をあなたの <a class=\"reference internal\" href=\"/ja/5.0/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=\"/ja/5.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\"><span class=\"pre\">sites</span> <span class=\"pre\">フレームワーク</span></code></a> をインストールしてください。</p>\n<p>また、 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-SITE_ID\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SITE_ID</span></code></a> に設定ファイルが表すサイトのIDが正しく設定されていることを確認してください。これは通常 <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> になります (つまり <code class=\"docutils literal notranslate\"><span class=\"pre\">SITE_ID</span> <span class=\"pre\">=</span> <span class=\"pre\">1</span></code> ですが、複数のサイトを管理するためにsitesフレームワークを使用している場合は、別のサイトのIDになる可能性があります) 。</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 設定に <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.flatpages'</span></code> を追加してください。</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><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;pages/&quot;</span><span class=\"p\">,</span> <span class=\"n\">include</span><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\"><span class=\"pre\">django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'</span></code> を <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> 設定に追加します。</p></li>\n<li><p>コマンド <a class=\"reference internal\" href=\"/ja/5.0/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>しくみ<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> は、データベースに2つのテーブル、<code class=\"docutils literal notranslate\"><span class=\"pre\">django_flatpage</span></code> と <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> は、URL をタイトルとテキストコンテンツのまとまりにマッピングするルックアップテーブルです。<code class=\"docutils literal notranslate\"><span class=\"pre\">django_flatpage_sites</span></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>フラットページを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=\"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;pages/&quot;</span><span class=\"p\">,</span> <span class=\"n\">include</span><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>「キャッチオール」パターンとして設定することもできます。この場合、そのパターンを他の 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\">re_path</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^(?P&lt;url&gt;.*/)$&quot;</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\">警告</p>\n<p>もし <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APPEND_SLASH</span></code></a> を <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> に設定する場合、スラッシュを除去しないと、末尾にスラッシュのないキャッチオールパターンや flatpages にはマッチしません。</p>\n</aside>\n<p>もう1つの一般的な設定方法は、フラットページを特定のページ数の限られたセットに使用し、URL をハードコーディングする方法です。これにより、<a class=\"reference internal\" href=\"/ja/5.0/ref/templates/builtins/#std-templatetag-url\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">url</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.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\">path</span><span class=\"p\">(</span><span class=\"s2\">&quot;about-us/&quot;</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=\"s2\">&quot;url&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;/about-us/&quot;</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\">flatpage</span><span class=\"p\">,</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> <span class=\"n\">name</span><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</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\"><span class=\"pre\">FlatpageFallbackMiddleware</span></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\"><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>Django アプリケーションが 404 エラーを出すたびに、このミドルウェアは最後の手段 して、リクエストされた URL があるか flatpages データベースをチェックします。具体的には、 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-SITE_ID\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SITE_ID</span></code></a> 設定に対応するサイト ID を持つ、指定された URL のフラットページをチェックします。</p>\n<p>もしマッチが見つかった場合、次のアルゴリズムに従います:</p>\n<ul class=\"simple\">\n<li><p>もし flatpage にカスタムテンプレートがあれば、そのテンプレートを読み込みます。そうでなければ、 <code class=\"file docutils literal notranslate\"><span class=\"pre\">flatpages/default.html</span></code> テンプレートを読み込みます。</p></li>\n<li><p>このテンプレートにはコンテキスト変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">flatpage</span></code> が渡されます。テンプレートのレンダリングには <a class=\"reference internal\" href=\"/ja/5.0/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> を使用します。</p></li>\n</ul>\n<p>ミドルウェアは結果のURLが有効なフラットページを参照している場合にのみ、末尾のスラッシュを追加してリダイレクトします (<a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APPEND_SLASH</span></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\">\n<p class=\"admonition-title\">フラットページはビュー・ミドルウェアを適用しません</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">FlatpageFallbackMiddleware</span></code> は、URL 解決が失敗し 404 エラーが発生した後にのみ適用されるため、返されるレスポンスには <a class=\"reference internal\" href=\"/ja/5.0/topics/http/middleware/#view-middleware\"><span class=\"std std-ref\">ビューミドルウェア</span></a>  のメソッドは適用されません。通常の URL 解決を経てビューに正常にルーティングされたリクエストのみが、ビューミドルウェアを適用します。</p>\n</aside>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></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\"><span class=\"pre\">FlatpageFallbackMiddleware</span></code></a> をリストの最後に記述します。これは、レスポンスを処理するときに最初に実行されることを意味し、 他のレスポンス処理ミドルウェアが 404 ではなく本当のフラットページのレスポンスを見ることを保証します。</p>\n<p>ミドルウェアについての詳細は <a class=\"reference internal\" href=\"/ja/5.0/topics/http/middleware/\"><span class=\"doc\">ミドルウェアのドキュメント</span></a> を参照してください。</p>\n<aside class=\"admonition-ensure-that-your-404-template-works admonition\">\n<p class=\"admonition-title\">404 テンプレートが正常に機能することを確認してください。</p>\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\"><span class=\"pre\">FlatpageFallbackMiddleware</span></code></a> は、別のビューが正常に 404 レスポンスを生成した後にのみ起動します。もし別のビューやミドルウェアクラスが 404 を生成しようとして例外を発生させた場合、そのレスポンスは HTTP 500 (&quot;Internal Server Error&quot;) となり、 <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> はフラットページの提供を試みません。</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\">警告</p>\n<p>フラットページの追加や編集の権限は、信頼できるユーザに制限されるべきです。フラットページは生の HTML で定義され、 Django では <strong>サニタイズ</strong> されていません。その結果、悪意のあるフラットページは、パーミッションの昇格を含む様々なセキュリティ上の脆弱性を引き起こす可能性があります。</p>\n</aside>\n<section id=\"via-the-admin-interface\">\n<span id=\"flatpages-admin\"></span><h3>admin インターフェイス経由<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 の自動管理インターフェイスを有効にしていれば、管理インデックスページに &quot;Flatpages&quot; セクションがあるはずです。システムの他のオブジェクトを編集するのと同じように、 flatpages を編集してください。</p>\n<p>フラットページ <code class=\"docutils literal notranslate\"><span class=\"pre\">FlatPage</span></code> モデルには <code class=\"docutils literal notranslate\"><span class=\"pre\">enable_comments</span></code> フィールドがあります。これは <code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.flatpages</span></code> では使用されませんが、あなたのプロジェクトやサードパーティアプリでは役に立つかもしれません。admin アプリケーションには表示されませんが、カスタム <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> を <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\">gettext_lazy</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n\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=\"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=\"n\">_</span><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>\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>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>フラットページは標準の <a class=\"reference internal\" href=\"/ja/5.0/topics/db/models/\"><span class=\"doc\">Django モデル</span></a> で表現され、 <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/5.0.x/django/contrib/flatpages/models.py\">django/contrib/flatpages/models.py</a> にあります。 <a class=\"reference internal\" href=\"/ja/5.0/topics/db/queries/\"><span class=\"doc\">Django データベース API</span></a> を使ってフラットページオブジェクトにアクセスできます。</p>\n</dd></dl>\n\n<aside class=\"admonition-check-for-duplicate-flatpage-urls admonition\">\n<p class=\"admonition-title\">重複するフラットページの URL をチェックする</p>\n<p>自分自身のコードを使って flatpages を追加または変更する場合、同じサイト内で重複する flatpage の URL をチェックしたいと思うでしょう。admin アプリケーションで使用されている flatpage フォームはこの検証チェックを行い、<code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.flatpages.forms.FlatpageForm</span></code> からインポートして、独自のビューで使用できます。</p>\n</aside>\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>デフォルトでは、フラットページはテンプレート <code class=\"file docutils literal notranslate\"><span class=\"pre\">flatpages/default.html</span></code> を使ってレンダリングされますが、特定のフラットページに対してそれを上書きできます。admin アプリケーションでは、&quot;Advanced options&quot; (クリックすると展開されます) というタイトルの折りたたんだフィールドセットにテンプレート名を指定するフィールドがあります。Python API を使ってフラットページを作成する場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">FlatPage</span></code> オブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code> フィールドにテンプレート名を設定できます。</p>\n<p><code class=\"file docutils literal notranslate\"><span class=\"pre\">flatpages/default.html</span></code> テンプレートを作成するのはあなたの責任です。テンプレートディレクトリ内に、<code class=\"file docutils literal notranslate\"><span class=\"pre\">flatpages</span></code> ディレクトリを作成し、その中に <code class=\"file docutils literal notranslate\"><span class=\"pre\">default.html</span></code> ファイルを作成してください。</p>\n<p>フラットページのテンプレートには、フラットページオブジェクトである <code class=\"docutils literal notranslate\"><span class=\"pre\">flatpage</span></code> という1つのコンテキスト変数が渡されます。</p>\n<p>以下は、サンプルの <code class=\"file docutils literal notranslate\"><span class=\"pre\">flatpages/default.html</span></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=\"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>フラットページの admin アプリケーションにはすでに生のHTMLを入力しているので、<code class=\"docutils literal notranslate\"><span class=\"pre\">flatpage.title</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">flatpage.content</span></code> の両方は、テンプレート内で <a class=\"reference internal\" href=\"/ja/5.0/ref/templates/language/#automatic-html-escaping\"><span class=\"std std-ref\">自動HTMLエスケープ</span></a> を <strong>必要としない</strong> とマークされています。</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\"><span class=\"pre\">FlatPage</span></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>flatpages アプリには、 <a class=\"reference internal\" href=\"/ja/5.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=\"/ja/5.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\"><span class=\"pre\">get_flatpages</span></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\"><span class=\"pre\">registration_required</span></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\"><span class=\"pre\">get_flatpages</span></code></a> テンプレートタグは <code class=\"docutils literal notranslate\"><span class=\"pre\">registration_required</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code> とマークされたフラットページのみを表示します。登録保護されたフラットページを表示したい場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></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\"><span class=\"pre\">get_flatpages</span></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\"><span class=\"pre\">starts_with</span></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=\"/ja/5.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\"><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><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> クラスは、現在の <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-SITE_ID\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SITE_ID</span></code></a> (詳細は <a class=\"reference internal\" href=\"/ja/5.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\"><span class=\"pre\">sites</span> <span class=\"pre\">ドキュメント</span></code></a> を参照) に定義されたすべての公開されている <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> を見て、サイトマップにエントリを作成します。これらのエントリには、 <a class=\"reference internal\" href=\"/ja/5.0/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> 属性のみが含まれます。 <a class=\"reference internal\" href=\"/ja/5.0/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> や <a class=\"reference internal\" href=\"/ja/5.0/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>, <a class=\"reference internal\" href=\"/ja/5.0/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>カスタマイズ例<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\"><span class=\"pre\">FlatPageSitemap</span></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=\"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<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=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</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;flatpages&quot;</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=\"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":"admin インターフェイス経由","anchor":"via-the-admin-interface","children":[]},{"title":"Python API 経由","anchor":"via-the-python-api","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":"/ja/5.0/ref/"},{"docname":"ref/contrib/index","title":"contrib パッケージ","url":"/ja/5.0/ref/contrib/"}],"prev":{"docname":"ref/contrib/contenttypes","title":"contenttypes フレームワーク","url":"/ja/5.0/ref/contrib/contenttypes/"},"next":{"docname":"ref/contrib/gis/index","title":"GeoDjango","url":"/ja/5.0/ref/contrib/gis/"},"formats":{"html":"/ja/5.0/ref/contrib/flatpages/","markdown":"/ja/5.0/ref/contrib/flatpages.md","json":"/ja/5.0/ref/contrib/flatpages.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/ref/contrib/flatpages.txt","official":"https://docs.djangoproject.com/ja/5.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","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}