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 アプリケーションをインストールするには,以下の手順に従って下さい:

  1. もし追加されていなければ, 'django.contrib.sites'INSTALLED_APPS 設定へ追加し sites フレームワーク をインストールします.
  2. 'django.contrib.flatpages'INSTALLED_APPS に加えます.
  3. 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'MIDDLEWARE_CLASSES に加えます.
  4. python manage.py syncdb を実行します.

flatpages の仕組み

manage.py syncdb を実行すると,データベースには django_flatpagesdjango_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.titleflatpage.content は、 自動 HTML エスケープ が必要なコンテンツとして 扱われません