revision-up-to: | 11321 (1.1) unfinished |
---|
Django にはオプションのアプリケーション、 “flatpages” が付属しています。 “flatpages” を使うと、データベースに素 (“flat”) の HTML コンテンツを Django の admin インタフェースや Python API から保存して管理できるようになります。
flatpage オブジェクトは、 URL、タイトル、内容だけからなる単純なオブジェクト です。 flatpage は一回限りしかレンダリングされないような、特殊なケースのペー ジ、例えば “About” や “Privacy Policy” のようなページで、データベースに保 存しておきたいがカスタムのアプリケーションを組むほどではないようなものに使っ て下さい。
flatpage ではカスタムのテンプレートも使えますし、デフォルトのシステム全体で 使われるフラットページテンプレートも使えます。フラットページは単一のサイト にも、複数のサイトにも関連づけできます。
自作のテンプレートにコンテンツを入れる場合、 content
フィールドを空
(blank) にしておいてもよくなりました。
Django で構築されたサイトの中にも、 flatpages を使っているものがあります:
flatpages アプリケーションをインストールするには、以下の手順に従って下さい:
'django.contrib.sites'
がまだINSTALLED_APPS
設定に追 追加されていなければ追加し、sites フレームワーク
をインストールします。Also make sure you’ve correctly set
SITE_ID
to the ID of the site the settings file represents. This will usually be1
(i.e.SITE_ID = 1
, but if you’re not using the sites framework to manage multiple sites, it could be the ID of a different site.
'django.contrib.flatpages'
をINSTALLED_APPS
に加え ます。
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'
をMIDDLEWARE_CLASSES
に加えます。
python manage.py syncdb
を実行します。
manage.py syncdb
を実行すると、データベースには django_flatpages
と
django_flatpages_sites
という二つのテーブルが作成されます。
django_flatpages
は、 URL をタイトルとテキストコンテンツに関連づける単
純な検索テーブルです。 django_flatpages_sites
は flatpage をサイトに関
連づけます。
全てのからくりは
FlatpageFallbackMiddleware
の中にあります。 Django アプリケーションのいずれかが 404 エラーを送出すると、
このミドルウェアが最後の試みとして、該当する URL がないかデータベースをチェッ
クします。もっと詳しく言えば、ミドルウェアは、該当 URL に対応し、かつ サイト
ID が SITE_ID
に対応しているような flatpage がないか調べます。
一致するオブジェクトが見つかると、 flatpages ミドルウェアは以下のアルゴリズ ムに従って応答します:
- flatpage にカスタムのテンプレートがある場合、テンプレートを読み込みま す。それ以外の場合には、
flatpages/default.html
という名のテン プレートを読み込みます。- flatpage はテンプレートに唯一のコンテキスト変数、
flatpage
を渡します。この変数は、flatpage オブジェクトです。 テンプレートのレンダリングにはRequestContext
を使います。
条件に一致するオブジェクトがなければ、リクエストは通常通りに処理されます。
ミドルウェアが有効になるのは 404 レスポンスの場合だけです。 500 など、他の HTTP 状態コードでは有効になりません。
MIDDLEWARE_CLASSES
の順番には注意が必要です。通常、このミドルウェ
アはリクエストを処理する最後の段階なので、
FlatpageFallbackMiddleware
はリストの末尾において下さい。
ミドルウェアの詳細は ミドルウェアのドキュメント を参照してくださ い。
404 テンプレートがあるか確かめましょう
Django が
FlatpageFallbackMiddleware
ビューを踏むのは、別のビューが 404 応答を生成したときだけだということに
注意しましょう。他のビューやミドルウェアで 404 を生成させようとして、実
際には別の例外を送出してしまった場合 (例えば、 404 例外に対応する適切な
テンプレートを用意していなかった場合は、 TemplateDoesNotExist
が
送出されます) には、応答は HTTP 500 (“Internal Server Error”) であり、
FlatpageFallbackMiddleware
はフラットページを提供しようとしません
Django 自動管理インタフェースを有効にしていれば、 “Flatpages” セクションが admin インデクスページに表示されます。他のオブジェクトと同じように flatpages を編集してください。
models.
FlatPage
¶flatpage は標準の Django モデル で表現されて おり、コードは django/contrib/flatpages/models.py にあります。 flatpage オブジェクトには Django データベース API を介してアクセスできます。
デフォルトでは、 flatpages は flatpages/default.html
テンプレート
を使ってレンダリングされますが、このテンプレートはオーバライドできます。
オーバライドを行うには、 flatpages/default.html
テンプレートを自分
で作成する必要があります。 flatpages
ディレクトリを作成し、その下に
default.html
という名のテンプレートファイルを置いて下さい。
flatpage テンプレートに渡されるコンテキスト変数は flatpage
の一つだ
けです。この変数は flatpage オブジェクトを表します。
簡単な flatpages/default.html
テンプレートの例を示しましょう:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>{{ flatpage.title }}</title>
</head>
<body>
{{ flatpage.content }}
</body>
</html>
flatpage の管理ページでは、生の HTML を入力しています。従って、
flatpage.title
と flatpage.content
は、テンプレート上で 自動
HTML エスケープ が必要なコンテンツとして
扱われません 。
Oct 26, 2017