汎用ビュー

revision-up-to:11321 (1.1) unfinished

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

汎用ビューの全般的な解説は、 汎用ビューの概要 にあります。

This reference contains details of Django’s built-in generic views, along with a list of all keyword arguments that a generic view expects. Remember that arguments may either come from the URL pattern or from the extra_context additional-information dictionary.

Most generic views require the queryset key, which is a QuerySet instance; see クエリを生成する for more information about QuerySet objects.

「簡単な」汎用ビュー

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 中の該当パラメタで補完されます。Because keyword interpolation is always done (even if no arguments are passed in), any "%" characters in the URL must be written as "%%" so that Python will convert them to a single percent sign on output.

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

必須の引数:

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

Optional arguments:

  • permanent: Whether the redirect should be permanent. The only difference here is the HTTP status code returned. If True, then the redirect will use status code 301. If False, then the redirect will use status code 302. By default, permanent is True.
The permanent keyword argument is new in Django 1.1.

例題:

以下の例では、 /foo/<id>//bar/<id>/ にパーマネントリダイレクト (HTTP 状態コード301) します:

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

This example issues a non-permanent redirect (HTTP status code 302) from /foo/<id>/ to /bar/<id>/:

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

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

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

This example shows how "%" characters must be written in the URL in order to avoid confusion with Python’s string formatting markers. If the redirect string is written as "%7Ejacob/" (with only a single %), an exception would be raised:

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

日付ベースの汎用ビュー

日付ベースの汎用ビュー (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 です。
  • 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] と等価です。
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: テンプレートコンテキストに追加する値からなる辞書で す。デフォルトでは、この辞書は空になっています。辞書内の値が呼び出し 可能オブジェクトの場合、汎用ビューはテンプレートのレンダリング直前に そのオブジェクトを呼び出します。

  • 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 を使います。

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

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 のインスタンスです。

ペジネーションに関する注意

paginate_by を指定した場合、 Django は結果をページ分割 (ペジネーション) します。 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 のドキュメント を参照してください。

特別なケースとして、 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.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 になります。