flatpages アプリケーション

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

  1. '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 be 1 (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.

  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 はリストの末尾において下さい。

ミドルウェアの詳細は ミドルウェアのドキュメント を参照してくださ い。

404 テンプレートがあるか確かめましょう

Django が FlatpageFallbackMiddleware ビューを踏むのは、別のビューが 404 応答を生成したときだけだということに 注意しましょう。他のビューやミドルウェアで 404 を生成させようとして、実 際には別の例外を送出してしまった場合 (例えば、 404 例外に対応する適切な テンプレートを用意していなかった場合は、 TemplateDoesNotExist が 送出されます) には、応答は HTTP 500 (“Internal Server Error”) であり、 FlatpageFallbackMiddleware はフラットページを提供しようとしません

flatpage の追加、変更、削除

admin インタフェースからの操作

Django 自動管理インタフェースを有効にしていれば、 “Flatpages” セクションが admin インデクスページに表示されます。他のオブジェクトと同じように flatpages を編集してください。

Python API からの操作

class models.FlatPage

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 エスケープ が必要なコンテンツとして 扱われません