flatpages アプリケーション
| revision-up-to: | 8001 (1.0pre SVN) |
|---|
Django にはオプションのアプリケーション、 "flatpages" が付属しています。 "flatpages" を使うと、データベースに素 ("flat") の HTML コンテンツを Django の admin インタフェースや Python API から保存して管理できるようになります。
flatpage オブジェクトは、 URL、タイトル、内容だけからなる単純なオブジェクト です。 flatpage は一回限りしかレンダリングされないような、特殊なケースのペー ジ、例えば "About" や "Privacy Policy" のようなページで、データベースに保 存しておきたいがカスタムのアプリケーションを組むほどではないようなものに使っ て下さい。
flatpage ではカスタムのテンプレートも使えますし、デフォルトのシステム全体で 使われるフラットページテンプレートも使えます。フラットページは単一のサイト にも、複数のサイトにも関連づけできます。
開発版の Django で新たに追加された機能
自作のテンプレートにコンテンツを入れる場合、 content フィールドを空 (blank) にしておいてもよくなりました。
Django で構築されたサイトの中にも、 flatpages を使っているものがあります:
インストール
flatpages アプリケーションをインストールするには、以下の手順に従って下さい:
- まだ追加されていなければ、 'django.contrib.sites' を INSTALLED_APPS 設定へ追加し、 sites フレームワーク をインストールします。
- 'django.contrib.flatpages' を INSTALLED_APPS に加えます。
- 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware' を MIDDLEWARE_CLASSES に加えます。
- python manage.py syncdb を実行します。
flatpages の仕組み
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 テンプレートがEnsure that your 404 template works
Django が FlatpageFallbackMiddleware ビューを踏むのは、別のビューが 404 応答が生成されたときだけだということに注意しましょう。他のビューや ミドルウェアで 404 を生成させようとして、実際には別の例外を送出してしまっ た場合 (例えば、 404 例外に対応する適切なテンプレートを用意していなかっ た場合には、 TemplateDoesNotExist が送出されます)、応答は HTTP 500 ("Internal Server Error") であり、 FlatpageFallbackMiddleware はフ ラットページを提供しようとしません
flatpage の追加、変更、削除
admin インタフェースからの操作
Django 自動管理インタフェースを有効にしていれば、 "Flatpages" セクションが admin インデクスページに表示されます。他のオブジェクトと同じように flatpages を編集してください。
Python API からの操作
flatpage は標準の Django モデル で表現されており、コードは django/contrib/flatpages/models.py にあります。 flatpage オブジェクトに は Django データベース API を介してアクセスできます。
flatpage のテンプレート
デフォルトでは、 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 エスケープ が必要なコンテンツとして 扱われません 。