flatpages アプリケーション
| revision-up-to: | 7210 (0.97pre SVN) |
|---|
Django にはオプションのアプリケーション, "flatpages" がついてきます. "flatpages" を使うと,データベースに素 ("flat") の HTML コンテンツを Django の admin インタフェースや Python API から保存して管理できるようになります.
flatpage オブジェクトは, URL,タイトル,内容だけからなる単純なオブジェクト です. flatpage は一回限りしかレンダリングされないような,特殊なケースのペー ジ,例えば "About" や "Privacy Policy" のようなページで,データベースに保 存しておきたいがカスタムのアプリケーションを組むほどではないようなものに使っ て下さい.
flatpage ではカスタムのテンプレートも使えますし,デフォルトのシステム全体で 使われるフラットページテンプレートも使えます.フラットページは単一のサイト にも,複数のサイトにも関連づけできます.
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 はリス トの末尾において下さい.
ミドルウェアの詳細は ミドルウェアのドキュメント を参照してください.
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 エスケープ が必要なコンテンツとして 扱われません 。