このドキュメントの Django のバージョンにはセキュリティ上の脆弱性があるため、すでにサポートが終了されています。新しいバージョンにアップグレードしてください!最新の Django のバージョンのドキュメントはこちら

Django v1.0 documentation

汎用ビュー

revision-up-to:8961 (1.0)

Web アプリケーションの作成は、同じパターンを何度も何度も繰り返し書くことに なるため、退屈なものです。 Django では、そんなパターンに共通する部分のほと んどを「汎用ビュー (generic view) 」という形で抽象化し、オブジェクトに対し てよく定義されるビューを、 Python コードを一切書かずに作成できるようにして います。

Django の汎用ビューには以下のようなものがあります:

  • list/detail インタフェースを実現するビューのセット。
  • アーカイブに入っているページ群に対する年/月/日のビューと、各ページの 詳細、そして「新着 (latest)」のページ (例えば Django weblog の year, month, day, detail, latest といったページ)。
  • オブジェクトの生成、編集、削除を行うためのビュー。

これらのビューは全て、URLconf ファイルに設定の入った辞書を作成し、 URLconf で URL パターンを記述しているタプルの 3 つめのメンバにその辞書を渡すことで 使えるようになります。例えば、djangoproject.com の blog を駆動している簡単 な weblog アプリのための URLconf を以下に示しましょう:

from django.conf.urls.defaults import *
from django_website.apps.blog.models import Entry

info_dict = {'queryset': Entry.objects.all(),
             'date_field': 'pub_date'}

urlpatterns = patterns('django.views.generic.date_based',
   (r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\w{1,2})/(?P<slug>[-\w]+)/$',
   'object_detail', info_dict),
   (r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\w{1,2})/$',
   'archive_day', info_dict),
   (r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$',
   'archive_month', info_dict),
   (r'^(?P<year>\d{4})/$', 'archive_year',  info_dict),
   (r'^$', 'archive_index', info_dict),
)

御覧のように、 URLconf では、 info_dict にいくつかのオプションを定義し ています。 queryset は汎用ビューに渡すオブジェクトに対する QuerySet (上の場合には Entry オブジェクト全て) です。また、追加の情報 (どのモデ ルを使っているのかをビューに教えるための情報) も定義しています。

以下では、各汎用ビューのドキュメントと、汎用ビューで使われる全てのキーワー ド引数について説明します。上の例では、引数は URL パターンの中にあるもの (month, day, year, など) も、辞書に入っているもの (queryset, date_field など) もあることに注意してください。

ほとんどの汎用ビューで queryset キーが必要です。この値は QuerySet インスタンスです。 QuerySet オブジェクトの詳細は クエリを生成する を参照してください。

ほとんどのビューは、 extra_context というオプションの引数を取れます。こ の引数の値は辞書で、ビューに渡したい任意の外部の情報を渡すためのものです。 extra_context 辞書の値は関数 (や呼び出し可能オブジェクト) でも、それ以 外のオブジェクトでもかまいません。関数はテンプレートに渡される直前に評価さ れます。ただし、 QuerySet は最初に評価した時点でデータを取得してキャッシュ に入れるので、 extra_context を使ってクエリセットを渡し、なおかつ QuerySet を常に最新の状態にしておきたい場合には、関数やラムダ表記を使って QuerySet を返させるようにせねばなりません。

「簡単な」汎用ビュー

django.views.generic.simple モジュールには、簡単なビューが入っていて、 ビューロジックの必要がないときのレンダリングと、リダイレクトの発行という よくある二つのケースを処理できるようになっています:

django.views.generic.simple.direct_to_template

解説:

指定のテンプレートにテンプレート変数 {{ params }} を指定してレンダリン グします。 {{ params }} は URL から取り出したパラメタの辞書になります。

必須の引数:

  • template: 使用するテンプレートの完全な名前です。

オプションの引数:

  • extra_context: テンプレートコンテキストに追加したい値を入れた辞書 です。辞書内の値が呼び出し可能オブジェクトの場合、ビューはテンプレー トのレンダリング直前にオブジェクトを呼び出します。
  • mimetype: 出力結果のドキュメントの MIME タイプです。 デフォルト値は DEFAULT_CONTENT_TYPE 設定の値です。

例題:

例えば、以下のような URL パターンを指定したとしましょう:

urlpatterns = patterns('django.views.generic.simple',
    (r'^foo/$',
        'direct_to_template', {'template': 'foo_index'}),
    (r'^foo/(?P<id>\d+)/$',
        'direct_to_template', {'template': 'foo_detail'}),
)

/foo/ へのリクエストは、 foo_index.html テンプレートを使ったレンダ リングになります。一方、 /foo/15/ へのリクエストは foo_detail.html テンプレートを使ったレンダリングになりますが、このときのコンテキスト変数 {{ params.id }}15 になります。

django.views.generic.simple.redirect_to

解説:

指定の URL へリダイレクトします。

URL を指定する文字列には、辞書スタイルの文字列フォーマットを含めてもよく、 その場合、 URL 中の該当パラメタで補完されます。

URL に None を指定すると、 HttpResponseGone (410) を発行します。

必須の引数:

  • url: リダイレクト先の URL を表す文字列です。 None にすると HTTP 410 エラー (Gone) を送出します。

例題:

以下の例では、 /foo/<id>//bar/<id>/ にリダイレクトします:

urlpatterns = patterns('django.views.generic.simple',
    ('^foo/(?P<id>\d+)/$', 'redirect_to', {'url' : '/bar/%(id)s/'}),
)

以下の例では、 /bar/ へのリクエストに対して HTTP 410 エラーを返します:

urlpatterns = patterns('django.views.generic.simple',
    ('^bar/$', 'redirect_to', {'url': None}),
)

日付ベースの汎用ビュー

日付ベースの汎用ビュー (date-based generic view, django.views.generic.date_based モジュール) は、日付ベースのデータを絞 り込めるページを表示するビューです。

django.views.generic.date_based.archive_index

解説:

「新着 ("latest")」オブジェクトを日付順で表示するトップレベルのインデクスペー ジです。 allow_futureTrue にしない限り、 未来の 日付のオブジェ クトは表示しません。

必須の引数:

  • queryset: アーカイブを提供するオブジェクトの QuerySet です。
  • date_field: QuerySet に指定したモデルの DateField または DateTimeField 型のフィールド名です。日付ベースのアーカイブで、ペー ジに掲載するオブジェクトを決定するために使います。

オプションの引数:

  • num_latest: 最近のオブジェクトとしてテンプレートコンテキストに送 り込まれるオブジェクトの数です。デフォルトは 15 です。
  • template_name: ページのレンダリングに使うテンプレートの完全な名前 です。この変数を使うと、デフォルトのテンプレート名 (下記参照) をオー バライドできます。
  • template_loader: テンプレートのロードに使うテンプレートローダです。 デフォルトでは django.template.loader になっています。
  • extra_context: テンプレートコンテキストに追加する値からなる辞書で す。デフォルトでは、この辞書は空になっています。辞書内の値が呼び出し 可能オブジェクトの場合、汎用ビューはテンプレートのレンダリング直前に そのオブジェクトを呼び出します。
  • allow_empty: オブジェクトがない場合にページを表示するかどうかを示 すブール値です。 False の場合、表示するべきオブジェクトが存在しな ければ、空のインデクスページを表示する代わりに 404 エラーを送出します。 デフォルトは True です。
  • context_processors: ビューのテンプレートに適用するテンプレートコ ンテキストプロセッサのリストです。
  • mimetype: 出力結果のドキュメントに適用する MIME タイプです。 デフォルトの値は DEFAULT_CONTENT_TYPE の設定値になります。
  • allow_future: 「未来の」オブジェクトをページに表示するかどうかを 制御するブール値です。「未来の」オブジェクトとは、 date_field に 指定したフィールドの値が現在の日/時よりも大きいようなオブジェクトで す。デフォルトでは False です。
Django 1.0 で新たに登場しました.
  • template_object_name: テンプレートコンテキストをテンプレート変数 として渡すときの名前です。デフォルト値は 'latest' です。

テンプレート名:

template_name を指定しない場合、ビューはデフォルトのテンプレートである <app_label>/<model_name>_archive.html を使います。ここで:

  • <model_name> はモデル名を全て小文字にしたものです。例えば StaffMember というモデルの場合は staffmember になります。
  • <app_label> はモデルアプリケーションへの Python パスの最も右側の 部分になります。例えば、モデルが apps/blog/models.py に入っていれ ば blog になります。

テンプレートコンテキスト:

extra_context の値に加え、テンプレートのコンテキストには以下の変数が入 ります:

  • date_list: queryset を介してオブジェクトを取得できる年を表す datetime.date オブジェクトのリストです。リストは逆順に並んでいま す。 queryset.dates(date_field, 'year')[::-1] と等価です。
Django 1.0 で変更されました: template_object_name に応じて動作が変わるようになりました。
  • latest: date_field の順に並んだ num_latest 個のオブジェク トです。例えば、 num_latest10 であれば、 latestqueryset 内のオブジェクトのうち、最新の 10 個からなるリストです。

    変数の名前は template_object_name パラメタで変更できます。デフォ ルト値は 'latest' です。例えば、 template_object_name'foo' にしたときの変数名は foo です。

django.views.generic.date_based.archive_year

解説:

指定年でオブジェクトのある月のリストを表示する、年ごとのアーカイブページで す。 allow_futureTrue にしない限り、 未来の 日付のオブジェク トは表示しません。

必須の引数:

  • year: アーカイブを提供する年の 4 桁の年号です。
  • queryset: アーカイブを提供するオブジェクトの QuerySet です。
  • date_field: QuerySet に指定したモデルの DateField または DateTimeField 型のフィールド名です。日付ベースのアーカイブで、ペー ジに掲載するオブジェクトを決定するために使います。

オプションの引数:

  • template_name: ページのレンダリングに使うテンプレートの完全な名前 です。この変数を使うと、デフォルトのテンプレート名 (下記参照) をオー バライドできます。
  • template_loader: テンプレートのロードに使うテンプレートローダです。 デフォルトでは django.template.loader になっています。
  • extra_context: テンプレートコンテキストに追加する値からなる辞書で す。デフォルトでは、この辞書は空になっています。辞書内の値が呼び出し 可能オブジェクトの場合、汎用ビューはテンプレートのレンダリング直前に そのオブジェクトを呼び出します。
  • allow_empty: オブジェクトがない場合にページを表示するかどうかを示 すブール値です。 False の場合、表示するべきオブジェクトが存在しな ければ、空のインデクスページを表示する代わりに 404 エラーを送出します。 デフォルトは False です。
  • context_processors: ビューのテンプレートに適用するテンプレートコ ンテキストプロセッサのリストです。
  • template_object_name: テンプレートコンテキスト中で使うテンプレー ト変数の名前を指定します。デフォルトでは 'object' です。ビューは このパラメタに '_list' を追加した値を変数名に使います。
  • make_object_list: 指定年の全てのオブジェクトのリストを取得してテ ンプレートに渡すかどうかを決めるブール値です。 True にすると、オ ブジェクトのリストを object_list という変数で利用できます (object_list は別の名前になるかもしれません。後述の「テンプレート コンテキスト」の節の object_list の説明を参照してください)。 デフォルトでは False になっています。
  • mimetype: 出力結果のドキュメントに適用する MIME タイプです。 デフォルトの値は DEFAULT_CONTENT_TYPE の設定値になります。
  • allow_future: 「未来の」オブジェクトをページに表示するかどうかを 制御するブール値です。「未来の」オブジェクトとは、 date_field に 指定したフィールドの値が現在の日/時よりも大きいようなオブジェクトで す。デフォルトでは False です。

テンプレート名:

template_name を指定しない場合、ビューはデフォルトのテンプレートである <app_label>/<model_name>_archive_year.html を使います。

テンプレートコンテキスト:

extra_context の値に加え、テンプレートのコンテキストには以下の変数が入 ります:

  • date_list: 指定年内で queryset を介してオブジェクトを取得でき る月を表す datetime.date オブジェクトのリストです。リストは昇順に 並んでいます。

  • year: 指定年の年号を表す 4 桁の文字列です。

  • object_list: make_object_list パラメタを True にした場合、 この値は指定年内のオブジェクトを日付フィールドで並べたリストになりま す。この変数の名前は template_object_name パラメタの設定に依存し ます。 template_object_name のデフォルト値は 'object' で、例 えば template_object_name の値が 'foo' であれば、変数名は foo_list になります。

    make_object_listFalse の場合、 object_list は空のリス トとしてテンプレートに渡されます。

django.views.generic.date_based.archive_month

解説:

指定月の全てのオブジェクトのリストを表示する、月ごとのアーカイブページです。 allow_futureTrue にしない限り、 未来の 日付のオブジェクトは表 示しません。

必須の引数:

  • year: アーカイブを提供する年の 4 桁の年号 (の文字列) です。
  • month: アーカイブを提供する月のです。 month_format 引数に従っ てフォーマットされています。
  • queryset: アーカイブを提供するオブジェクトの QuerySet です。
  • date_field: QuerySet に指定したモデルの DateField または DateTimeField 型のフィールド名です。日付ベースのアーカイブで、ペー ジに掲載するオブジェクトを決定するために使います。

オプションの引数:

  • month_format: month パラメタで使っているフォーマットを指定す るためのフォーマット文字列です。この値は Python の time.strftime が受け取るのと同じ書法のフォーマット文字列を指定します。 (strftime のドキュメント 参照)。デフォルトでは "%b" に設定さ れており、これは 3 文字で省略して表した月名です。数字を使うように変え たければ "%m" を使って下さい。
  • template_name: ページのレンダリングに使うテンプレートの完全な名前 です。この変数を使うと、デフォルトのテンプレート名 (下記参照) をオー バライドできます。
  • template_loader: テンプレートのロードに使うテンプレートローダです。 デフォルトでは django.template.loader になっています。
  • extra_context: テンプレートコンテキストに追加する値からなる辞書で す。デフォルトでは、この辞書は空になっています。辞書内の値が呼び出し 可能オブジェクトの場合、汎用ビューはテンプレートのレンダリング直前に そのオブジェクトを呼び出します。
  • allow_empty: オブジェクトがない場合にページを表示するかどうかを示 すブール値です。 False の場合、表示するべきオブジェクトが存在しな ければ、空のインデクスページを表示する代わりに 404 エラーを送出します。 デフォルトは False です。
  • context_processors: ビューのテンプレートに適用するテンプレートコ ンテキストプロセッサのリストです。
  • template_object_name: テンプレートコンテキスト内で使うテンプレー ト変数名を示します。デフォルトでは 'object' になっています。ビュー はこの変数名に '_list' を追加して変数名を決定します。
  • mimetype: 出力結果のドキュメントに適用する MIME タイプです。 デフォルトの値は DEFAULT_CONTENT_TYPE の設定値になります。
  • allow_future: 「未来の」オブジェクトをページに表示するかどうかを 制御するブール値です。「未来の」オブジェクトとは、 date_field に 指定したフィールドの値が現在の日/時よりも大きいようなオブジェクトで す。デフォルトでは False です。

テンプレート名:

template_name を指定しない場合、ビューはデフォルトのテンプレートである <app_label>/<model_name>_archive_month.html を使います。

テンプレートコンテキスト:

extra_context の値に加え、テンプレートのコンテキストには以下の変数が入 ります:

  • month: 指定月を表す datetime.date オブジェクトです。
  • next_month: 次の月の最初の日を表す datetime.date オブジェクト です。次の月が未来の日付の場合には None になります。
  • previous_month: 前の月の最初の日を表す datetime.date オブジェクト です。 next_month と違い、決して None にはなりません。
  • object_list: 指定月内のオブジェクトからなるリストです。この変数の 名前は template_object_name パラメタの設定に依存します。 template_object_name のデフォルト値は 'object' で、例えば template_object_name の値が 'foo' であれば、変数名は foo_list になります。

django.views.generic.date_based.archive_week

解説:

指定週の全てのオブジェクトのリストを表示する、週ごとのアーカイブページです。 allow_futureTrue にしない限り、 未来の 日付のオブジェクトは表 示しません。

必須の引数:

  • year: アーカイブを提供する年の 4 桁の年号 (の文字列) です。
  • week: アーカイブを提供する週 (の文字列) です。週は日曜から始まり ます。
  • queryset: アーカイブを提供するオブジェクトの QuerySet です。
  • date_field: QuerySet に指定したモデルの DateField または DateTimeField 型のフィールド名です。日付ベースのアーカイブで、ペー ジに掲載するオブジェクトを決定するために使います。

オプションの引数:

  • template_name: ページのレンダリングに使うテンプレートの完全な名前 です。この変数を使うと、デフォルトのテンプレート名 (下記参照) をオー バライドできます。
  • template_loader: テンプレートのロードに使うテンプレートローダです。 デフォルトでは django.template.loader になっています。
  • extra_context: テンプレートコンテキストに追加する値からなる辞書で す。デフォルトでは、この辞書は空になっています。辞書内の値が呼び出し 可能オブジェクトの場合、汎用ビューはテンプレートのレンダリング直前に そのオブジェクトを呼び出します。
  • allow_empty: オブジェクトがない場合にページを表示するかどうかを示 すブール値です。 False の場合、表示するべきオブジェクトが存在しな ければ、空のインデクスページを表示する代わりに 404 エラーを送出します。 デフォルトは False です。
  • context_processors: ビューのテンプレートに適用するテンプレートコ ンテキストプロセッサのリストです。
  • template_object_name: テンプレートコンテキスト内で使うテンプレー ト変数名を示します。デフォルトでは 'object' になっています。ビュー はこの変数名に '_list' を追加して変数名を決定します。
  • mimetype: 出力結果のドキュメントに適用する MIME タイプです。 デフォルトの値は DEFAULT_CONTENT_TYPE の設定値になります。
  • allow_future: 「未来の」オブジェクトをページに表示するかどうかを 制御するブール値です。「未来の」オブジェクトとは、 date_field に 指定したフィールドの値が現在の日/時よりも大きいようなオブジェクトで す。デフォルトでは False です。

テンプレート名:

template_name を指定しない場合、ビューはデフォルトのテンプレートである <app_label>/<model_name>_archive_week.html を使います。

テンプレートコンテキスト:

extra_context の値に加え、テンプレートのコンテキストには以下の変数が入 ります:

  • week: 指定週を表す datetime.date オブジェクトです。
  • object_list: 指定週内のオブジェクトからなるリストです。この変数の 名前は template_object_name パラメタの設定に依存します。 template_object_name のデフォルト値は 'object' で、例えば template_object_name の値が 'foo' であれば、変数名は foo_list になります。

django.views.generic.date_based.archive_day

解説:

指定日の全てのオブジェクトのリストを表示する、日ごとのアーカイブページです。 allow_futureTrue にしない限り、 未来の 日付のオブジェクトを表 示させようとすると、該当するオブジェクトの有無にかかわらず 404 エラーを送出 します。

必須の引数:

  • year: アーカイブを提供する年の 4 桁の年号 (の文字列) です。
  • month: アーカイブを提供する月です。 month_format 引数に従って フォーマットされています。
  • day: アーカイブを提供する日です。 day_format 引数に従ってフォー マットされています。
  • queryset: アーカイブを提供するオブジェクトの QuerySet です。
  • date_field: QuerySet に指定したモデルの DateField または DateTimeField 型のフィールド名です。日付ベースのアーカイブで、ペー ジに掲載するオブジェクトを決定するために使います。

オプションの引数:

  • month_format: month パラメタで使っているフォーマットを指定す るためのフォーマット文字列です。この値は Python の time.strftime が受け取るのと同じ書法のフォーマット文字列を指定します。 (strftime のドキュメント 参照)。デフォルトでは "%b" に設定さ れており、これは 3 文字で省略して表した月名です。数字を使うように変え たければ "%m" を使って下さい。
  • day_format: month_format に似ていますが、 day パラメタ用 です。デフォルト値は "%d" (日付を 01-31 の 2 桁の 10 進数で表した もの) です。
  • template_name: ページのレンダリングに使うテンプレートの完全な名前 です。この変数を使うと、デフォルトのテンプレート名 (下記参照) をオー バライドできます。
  • template_loader: テンプレートのロードに使うテンプレートローダです。 デフォルトでは django.template.loader になっています。
  • extra_context: テンプレートコンテキストに追加する値からなる辞書で す。デフォルトでは、この辞書は空になっています。辞書内の値が呼び出し 可能オブジェクトの場合、汎用ビューはテンプレートのレンダリング直前に そのオブジェクトを呼び出します。
  • allow_empty: オブジェクトがない場合にページを表示するかどうかを示 すブール値です。 False の場合、表示するべきオブジェクトが存在しな ければ、空のインデクスページを表示する代わりに 404 エラーを送出します。 デフォルトは False です。
  • context_processors: ビューのテンプレートに適用するテンプレートコ ンテキストプロセッサのリストです。
  • template_object_name: テンプレートコンテキスト内で使うテンプレー ト変数名を示します。デフォルトでは 'object' になっています。ビュー はこの変数名に '_list' を追加して変数名を決定します。
  • mimetype: 出力結果のドキュメントに適用する MIME タイプです。 デフォルトの値は DEFAULT_CONTENT_TYPE の設定値になります。
  • allow_future: 「未来の」オブジェクトをページに表示するかどうかを 制御するブール値です。「未来の」オブジェクトとは、 date_field に 指定したフィールドの値が現在の日/時よりも大きいようなオブジェクトで す。デフォルトでは False です。

テンプレート名:

template_name を指定しない場合、ビューはデフォルトのテンプレートである <app_label>/<model_name>_archive_day.html を使います。

テンプレートコンテキスト:

extra_context の値に加え、テンプレートのコンテキストには以下の変数が入 ります:

  • day: 指定日を表す datetime.date オブジェクトです。
  • next_day: 次の日を表す datetime.date オブジェクトです。次の 日が未来の日付の場合には None になります。
  • previous_day: 前の日を表す datetime.date オブジェクトです。 next_day と違い、決して None にはなりません。
  • object_list: 指定月内のオブジェクトからなるリストです。この変数の 名前は template_object_name パラメタの設定に依存します。 template_object_name のデフォルト値は 'object' で、例えば template_object_name の値が 'foo' であれば、変数名は foo_list になります。

django.views.generic.date_based.archive_today

解説:

今日 の全てのオブジェクトを表示する日ごとアーカイブページです。このページ は archive_day と全く同じで、 year/month/day といった引数を とらず、今日の日付を使う点だけが違います。

django.views.generic.date_based.object_detail

解説:

個々のオブジェクトを表現するページです。オブジェクトに設定された時刻が未来 を表す値の場合、 allow_futureTrue にしない限り、このビューはデフォ ルトで 404 エラーを送出します。

必須の引数:

  • year: オブジェクトの日付の年部分で、 4 桁の年号 (の文字列) です。

  • month: オブジェクトの日付の月部分で、 month_format 引数に従っ てフォーマットされています。

  • day: オブジェクトの日付の日部分で、 day_format 引数に従って フォーマットされています。

  • queryset: オブジェクトの入っている QuerySet です。

  • date_field: QuerySet に指定したモデルの DateField または DateTimeField 型のフィールド名です。汎用ビューが year, month, day に応じてオブジェクトを照合するために使います。

  • object_id または (slug slug_field) が必要です。

    object_id を使う場合、ページに表示するオブジェクトの主キーとなる フィールドの値を指定せねばなりません。

    そうでない場合には、 slug にオブジェクトの slug を、 slug_fieldQuerySet に指定したモデルの slug フィールド名を 指定せねばなりません。 slug_field のデフォルト値は 'slug' で す。

オプションの引数:

  • month_format: month パラメタで使っているフォーマットを指定す るためのフォーマット文字列です。この値は Python の time.strftime が受け取るのと同じ書法のフォーマット文字列を指定します。 (strftime のドキュメント 参照)。デフォルトでは "%b" に設定さ れており、これは 3 文字で省略して表した月名です。数字を使うように変え たければ "%m" を使って下さい。

  • day_format: month_format に似ていますが、 day パラメタ用 です。デフォルト値は "%d" (日付を 01-31 の 2 桁の 10 進数で表した もの) です。

  • template_name: ページのレンダリングに使うテンプレートの完全な名前 です。この変数を使うと、デフォルトのテンプレート名 (下記参照) をオー バライドできます。

  • template_name_field: オブジェクトの表示に使うテンプレート名が入っ たフィールドの名前です。このパラメタを使うと、データ中にテンプレート 名を保存しておけます。 例えば、オブジェクトに 'the_template' という名前のフィールドがあ り、その値が 'foo.html' という文字列の場合、 template_name_field'the_template' に指定しておくと、汎用 ビューはオブジェクトの表示に 'foo.html' を使おうとするわけです。

    ちょっと首を捻りたくなるような機能ですが、場合によってはとても便利な 機能です。

  • template_loader: テンプレートのロードに使うテンプレートローダです。 デフォルトでは django.template.loader になっています。

  • extra_context: テンプレートコンテキストに追加する値からなる辞書で す。デフォルトでは、この辞書は空になっています。辞書内の値が呼び出し 可能オブジェクトの場合、汎用ビューはテンプレートのレンダリング直前に そのオブジェクトを呼び出します。

  • allow_empty: オブジェクトがない場合にページを表示するかどうかを示 すブール値です。 False の場合、表示するべきオブジェクトが存在しな ければ、空のインデクスページを表示する代わりに 404 エラーを送出します。 デフォルトは False です。

  • context_processors: ビューのテンプレートに適用するテンプレートコ ンテキストプロセッサのリストです。

  • template_object_name: テンプレートコンテキスト内で使うテンプレー ト変数名を示します。デフォルトでは 'object' になっています。ビュー はこの変数名に '_list' を追加して変数名を決定します。

  • mimetype: 出力結果のドキュメントに適用する MIME タイプです。 デフォルトの値は DEFAULT_CONTENT_TYPE の設定値になります。

  • allow_future: 「未来の」オブジェクトをページに表示するかどうかを 制御するブール値です。「未来の」オブジェクトとは、 date_field に 指定したフィールドの値が現在の日/時よりも大きいようなオブジェクトで す。デフォルトでは False です。

テンプレート名:

template_name を指定しない場合、ビューはデフォルトのテンプレートである <app_label>/<model_name>_detail.html を使います。

テンプレートコンテキスト:

extra_context の値に加え、テンプレートのコンテキストには以下の変数が入 ります:

  • object: オブジェクトです。この変数変の名前は template_object_name パラメタの値に依存し、そのデフォルト値は 'object' です。 template_object_name'foo' の場合、変 数名は foo になります。

リスト/詳細形式の汎用ビュー

リスト-詳細 (list/detail) 形式の汎用ビューフレームワーク (django.views.generic.list_detail モジュール) は、日付ベースの汎用ビュー に似ていますが、オブジェクトのリストと個々のオブジェクトのページという二つ のビューしか持ちません。

django.views.generic.list_detail.object_list

解説:

オブジェクトのリストを表現するページです。

必須の引数:

  • queryset: オブジェクトの入っている QuerySet です。

オプションの引数:

  • paginate_by: ページあたり何個のオブジェクトを表示するかを指定する 整数です。この引数を指定すると、ビューはオブジェクトをページあたり paginate_by 個のオブジェクトに分割します。ビューは (GET を介 して渡される) クエリ文字列パラメタか、 URLconf で指定した変数 page を引数にとります。詳しくは下記の 「 pagination に関する注意 」を参照してください。
  • page: 現在のページ番号を指定する 1 から始まる整数値か、文字列 'last' です。詳しくは下記の「 pagination に関する注意 」を参照 してください。
  • template_name: ページのレンダリングに使うテンプレートの完全な名前 です。この変数を使うと、デフォルトのテンプレート名 (下記参照) をオー バライドできます。
  • template_loader: テンプレートのロードに使うテンプレートローダです。 デフォルトでは django.template.loader になっています。
  • extra_context: テンプレートコンテキストに追加する値からなる辞書で す。デフォルトでは、この辞書は空になっています。辞書内の値が呼び出し 可能オブジェクトの場合、汎用ビューはテンプレートのレンダリング直前に そのオブジェクトを呼び出します。
  • allow_empty: オブジェクトがない場合にページを表示するかどうかを示 すブール値です。 False の場合、表示するべきオブジェクトが存在しな ければ、空のインデクスページを表示する代わりに 404 エラーを送出します。 デフォルトは True です。
  • context_processors: ビューのテンプレートに適用するテンプレートコ ンテキストプロセッサのリストです。
  • template_object_name: テンプレートコンテキスト内で使うテンプレー ト変数名を示します。デフォルトでは 'object' になっています。ビュー はこの変数名に '_list' を追加して変数名を決定します。
  • mimetype: 出力結果のドキュメントに適用する MIME タイプです。 デフォルトの値は DEFAULT_CONTENT_TYPE の設定値になります。

テンプレート名:

template_name を指定しない場合、ビューはデフォルトのテンプレートである <app_label>/<model_name>_list.html を使います。

テンプレートコンテキスト:

Django 1.0 で新たに登場しました: paginator および page_obj が追加されました。

extra_context の値に加え、テンプレートのコンテキストには以下の変数が入 ります:

  • object_list: オブジェクトのリストです。この変数の名前は template_object_name パラメタの設定に依存します。 template_object_name のデフォルト値は 'object' で、例えば template_object_name の値が 'foo' であれば、変数名は foo_list になります。
  • is_paginated: 表示結果がページ分割されているかどうかを示すブール 値です。具体的には、オブジェクトの個数が paginate_by と等しいかそ れ以下の場合には False にセットされます。

表示結果がページ分割されている場合、コンテキストには以下の追加の変数が入り ます:

  • paginator: django.core.paginator.Paginator のインスタンスです。
  • page_obj: django.core.paginator.Page のインスタンスです。

pagination に関する注意

paginate_by を指定した場合、 Django は結果をページ分割 (peginate) しま す。 URL でページ番号を指定するには二つの方法があります:

  • URLconf で page パラメタをキャプチャします。例えば、 URLconf は以 下のようになるでしょう:

    (r'^objects/page(?P<page>[0-9]+)/$', 'object_list', dict(info_dict))
    
  • ページ番号をクエリ文字列パラメタ page に渡します。例えば URL は以 下のようになります:

    /objects/?page=3
  • 全てのページ番号にわたるループを実施したい場合は、 page_range を 使ってください。例えば、page_range にわたる反復処理を行って、 全てのページへのリンクを作成できます。

pagepage_range は 0 ではなく 1 から始まる数で指定します。従って 最初のページのページ番号は 1 です。

ペジネーションの詳細は、 Pagination のドキュメント を参照してください。

Django 1.0 で新たに登場しました.

特別なケースとして、 page の値に last を使えます:

/objects/?page=last

このようにすると、いちいち総ページ数を数えなくても、最後のページにアクセス できます。

page の値は実在するページ番号か、 last でなければなりません。それ以 外の値を page に指定すると 404 エラーを引き起こします。

django.views.generic.list_detail.object_detail

個々のオブジェクトを表現するページです。

解説:

個々のオブジェクトを表現するページです。

必須の引数:

  • queryset: オブジェクトの入っている QuerySet です。

  • object_id または (slug slug_field) が必要です。

    object_id を使う場合、ページに表示するオブジェクトの主キーとなる フィールドの値を指定せねばなりません。

    そうでない場合には、 slug にオブジェクトの slug を、 slug_fieldQuerySet に指定したモデルの slug フィールド名を 指定せねばなりません。 slug_field のデフォルト値は 'slug' で す。

オプションの引数:

  • template_name: ページのレンダリングに使うテンプレートの完全な名前 です。この変数を使うと、デフォルトのテンプレート名 (下記参照) をオー バライドできます。

  • template_name_field: オブジェクトの表示に使うテンプレート名が入っ たフィールドの名前です。このパラメタを使うと、データ中にテンプレート 名を保存しておけます。 別の言い方をするなら、オブジェクトに 'the_template' という名前の フィールドがあり、その値が 'foo.html' という文字列の場合、 template_name_field'the_template' に指定しておくと、汎用 ビューはオブジェクトの表示に 'foo.html' を使おうとします。

    ちょっと首を捻りたくなるような機能ですが、場合によってはとても便利な 機能です。

  • template_loader: テンプレートのロードに使うテンプレートローダです。 デフォルトでは django.template.loader になっています。

  • extra_context: テンプレートコンテキストに追加する値からなる辞書で す。デフォルトでは、この辞書は空になっています。辞書内の値が呼び出し 可能オブジェクトの場合、汎用ビューはテンプレートのレンダリング直前に そのオブジェクトを呼び出します。

  • context_processors: ビューのテンプレートに適用するテンプレートコ ンテキストプロセッサのリストです。

  • template_object_name: テンプレートコンテキスト内で使うテンプレー ト変数名を示します。デフォルトでは 'object' になっています。ビュー はこの変数名に '_list' を追加して変数名を決定します。

  • mimetype: 出力結果のドキュメントに適用する MIME タイプです。 デフォルトの値は DEFAULT_CONTENT_TYPE の設定値になります。

テンプレート名:

template_name を指定しない場合、ビューはデフォルトのテンプレートである <app_label>/<model_name>_detail.html を使います。

テンプレートコンテキスト:

extra_context の値に加え、テンプレートのコンテキストには以下の変数が入 ります:

  • object: オブジェクトです。この変数変の名前は template_object_name パラメタの値に依存し、そのデフォルト値は 'object' です。 template_object_name'foo' の場合、変 数名は foo になります。

作成/更新/削除の汎用ビュー

django.views.generic.create_update モジュールには、オブジェクトの作成 (create)、編集 (edit, update)、削除 (delete) のための関数が入っています。

Django 1.0 で変更されました.

django.views.generic.create_update.create_objectdjango.views.generic.create_update.update_object は、 forms ライブラリ を使ってフォームを生成・表示す るようになりました。

django.views.generic.create_update.create_object

解説:

オブジェクト作成のためのフォームを表示し、オブジェクトを保存するためのペー ジです。検証エラーが生じた場合にはフォームを再表示します。

必須の引数:

  • form_class または model のいずれかを指定せねばなりません。

    form_class を指定する場合には、 django.forms.ModelForm クラスのサブクラスを指定します。この引数は、モデルのフォームをカスタ マイズしたいときに使います。詳しくは ModelForm のドキュメント を参照して ください。

    model には Django のモデルクラスを指定します。この場合、フォーム は model に対する標準の ModelForm で生成されます。

オプションの引数:

  • post_save_redirect: はオブジェクトを保存した後のビューのリダイレ クト先 の URL です。デフォルト値は object.get_absolute_url() です。

    post_save_redirect には、辞書を使う文字列フォーマット引数を含めら れます。辞書のキーはオブジェクトのフィールド名に解釈されます。例えば、 post_save_redirect="/polls/%(slug)s/" のように指定できます。

  • login_required: オブジェクトを編集し、変更を保存するため編集にロ グインが必要かどうかを指定するブール値です。 Django の 認証システム にフックをかけます。デフォルト値は False です。

    この値が True の場合、匿名ユーザがこのページを訪問したりフォーム を保存しようとしたりすると、 Django はリクエストを /accounts/login/ にリダイレクトします。

  • template_name: ページのレンダリングに使うテンプレートの完全な名前 です。この変数を使うと、デフォルトのテンプレート名 (下記参照) をオー バライドできます。

  • template_loader: テンプレートのロードに使うテンプレートローダです。 デフォルトでは django.template.loader になっています。

  • extra_context: テンプレートコンテキストに追加する値からなる辞書で す。デフォルトでは、この辞書は空になっています。辞書内の値が呼び出し 可能オブジェクトの場合、汎用ビューはテンプレートのレンダリング直前に そのオブジェクトを呼び出します。

  • context_processors: ビューのテンプレートに適用するテンプレートコ ンテキストプロセッサのリストです。

テンプレート名:

template_name を指定しない場合、ビューはデフォルトのテンプレートである <app_label>/<model_name>_form.html を使います。

テンプレートコンテキスト:

extra_context の値に加え、テンプレートのコンテキストには以下の変数が入 ります:

  • form: オブジェクトを編集するためのフォームを表現する django.forms.ModelForm インスタンスです。この変数を使うと、テ ンプレートシステム中でフォームフィールドを簡単に参照できます。

    例えば、モデルが nameaddress という二つのフィールドを持っ ている場合は、以下のように書けます:

    <form action="" method="post">
    <p>{{ form.name.label_tag }} {{ form.name }}</p>
    <p>{{ form.address.label_tag }} {{ form.address }}</p>
    </form>

    Form オブジェクトをテンプレート内で使う方法の詳しい説明は、 forms のドキュメント を参照してください。

django.views.generic.create_update.update_object

解説:

既存のオブジェクトを編集するためのフォームを表示し、オブジェクトを保存する ためのページです。検証エラーが生じた場合にはフォームを再表示します。

必須の引数:

  • form_class または model のいずれかを指定せねばなりません。

    form_class を指定する場合には、 django.forms.ModelForm クラスのサブクラスを指定します。この引数は、モデルのフォームをカスタ マイズしたいときに使います。詳しくは ModelForm のドキュメント を参照して ください。

    model には Django のモデルクラスを指定します。この場合、フォーム は model に対する標準の ModelForm で生成されます。

  • object_id または (slug slug_field) が必要です。

    object_id を使う場合、ページに表示するオブジェクトの主キーとなる フィールドの値を指定せねばなりません。

    そうでない場合には、 slug にオブジェクトの slug を、 slug_fieldQuerySet に指定したモデルの slug フィールド名を 指定せねばなりません。 slug_field のデフォルト値は 'slug' で す。

オプションの引数:

  • post_save_redirect: オブジェクトを保存した後のビューのリダイレ クト先 の URL です。デフォルト値は object.get_absolute_url() です。

    post_save_redirect には辞書を使う文字列フォーマット引数が入ります。 辞書のキーはオブジェクトのフィールド名に解釈されます。例えば、 post_save_redirect="/polls/%(slug)s/" のように指定できます。

  • login_required: オブジェクトを編集し、変更を保存するため編集にロ グインが必要かどうかを指定するブール値です。 Django の 認証システム にフックをかけます。デフォルト値は False です。

    この値が True の場合、匿名ユーザがこのページを訪問したりフォーム を保存しようとしたりすると、 Django はリクエストを /accounts/login/ にリダイレクトします。

  • template_name: ページのレンダリングに使うテンプレートの完全な名前 です。この変数を使うと、デフォルトのテンプレート名 (下記参照) をオー バライドできます。

  • template_loader: テンプレートのロードに使うテンプレートローダです。 デフォルトでは django.template.loader になっています。

  • extra_context: テンプレートコンテキストに追加する値からなる辞書で す。デフォルトでは、この辞書は空になっています。辞書内の値が呼び出し 可能オブジェクトの場合、汎用ビューはテンプレートのレンダリング直前に そのオブジェクトを呼び出します。

  • context_processors: ビューのテンプレートに適用するテンプレートコ ンテキストプロセッサのリストです。

  • template_object_name: テンプレートコンテキスト内で使うテンプレー ト変数名を示します。デフォルトでは 'object' になっています。

テンプレート名:

template_name を指定しない場合、ビューはデフォルトのテンプレートである <app_label>/<model_name>_form.html を使います。

テンプレートコンテキスト:

extra_context の値に加え、テンプレートのコンテキストには以下の変数が入 ります:

  • form: オブジェクトを編集するためのフォームを表現する django.oldforms.ModelForm インスタンスです。この変数を使うと、テ ンプレートシステム中でフォームフィールドを簡単に参照できます。

    例えば、モデルが nameaddress という二つのフィールドを持っ ている場合は、以下のように書けます:

    <form action="" method="post">
    <p>{{ form.name.label_tag }} {{ form.name }}</p>
    <p>{{ form.address.label_tag }} {{ form.address }}</p>
    </form>

    Form オブジェクトをテンプレート内で使う方法の詳しい説明は、 forms のドキュメント を参照してください。

  • object: オブジェクトです。この変数変の名前は template_object_name パラメタの値に依存し、そのデフォルト値は 'object' です。 template_object_name'foo' の場合、変 数名は foo になります。

django.views.generic.create_update.delete_object

解説:

既存のオブジェクトを削除するための確認ページを表示し、オブジェクトを削除する ためのページです。オブジェクトを削除するのはリクエストメソッドが POST であった場合だけです。このビューを GET で取得すると、同じ URL に対して POST を行うような確認ページを表示します。

必須の引数:

  • model: フォームで削除するオブジェクトの Django モデルクラス です。

  • object_id または (slug slug_field) が必要です。

    object_id を使う場合、ページに表示するオブジェクトの主キーとなる フィールドの値を指定せねばなりません。

    そうでない場合には、 slug にオブジェクトの slug を、 slug_fieldQuerySet に指定したモデルの slug フィールド名を 指定せねばなりません。 slug_field のデフォルト値は 'slug' で す。

  • post_delete_redirect: オブジェクトを削除した後のビューのリダイレ クト先 の URL です。

オプションの引数:

  • login_required: ページを表示し、変更を保存するため編集にログイン が必要かどうかを指定するブール値です。 Django の 認証システム にフックをかけます。デフォルト値は False です。

    この値が True の場合、匿名ユーザがこのページを訪問したりフォーム を保存しようとしたりすると、 Django はリクエストを /accounts/login/ にリダイレクトします。

  • template_name: ページのレンダリングに使うテンプレートの完全な名前 です。この変数を使うと、デフォルトのテンプレート名 (下記参照) をオー バライドできます。

  • template_loader: テンプレートのロードに使うテンプレートローダです。 デフォルトでは django.template.loader になっています。

  • extra_context: テンプレートコンテキストに追加する値からなる辞書で す。デフォルトでは、この辞書は空になっています。辞書内の値が呼び出し 可能オブジェクトの場合、汎用ビューはテンプレートのレンダリング直前に そのオブジェクトを呼び出します。

  • context_processors: ビューのテンプレートに適用するテンプレートコ ンテキストプロセッサのリストです。

  • template_object_name: テンプレートコンテキスト内で使うテンプレー ト変数名を示します。デフォルトでは 'object' になっています。

テンプレート名:

template_name を指定しない場合、ビューはデフォルトのテンプレートである <app_label>/<model_name>_confirm_delete.html を使います。

テンプレートコンテキスト:

extra_context の値に加え、テンプレートのコンテキストには以下の変数が入 ります:

  • object: オブジェクトです。この変数変の名前は template_object_name パラメタの値に依存し、そのデフォルト値は 'object' です。 template_object_name'foo' の場合、変 数名は foo になります。