.. _ref-generic-views: ========== 汎用ビュー ========== :revision-up-to: 11321 (1.1) unfinished Web アプリケーションの作成は、同じパターンを何度も何度も繰り返し書くことに なるため、退屈なものです。 Django では、そんなパターンの中でもっとも共通す る部分を「汎用ビュー (generic view) 」という形で抽象化しています。汎用ビュー を使えば、オブジェクトを操作するためによく使うビューを、 Python コードを一 切書かずに作成できます。 汎用ビューの全般的な解説は、 :ref:`汎用ビューの概要 ` にあります。 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 :ref:`topics-db-queries` 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\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``. .. versionadded:: 1.1 The ``permanent`` keyword argument is new in Django 1.1. **例題:** 以下の例では、 ``/foo//`` を ``/bar//`` にパーマネントリダイレクト (HTTP 状態コード301) します:: urlpatterns = patterns('django.views.generic.simple', ('^foo/(?P\d+)/$', 'redirect_to', {'url' : '/bar/%(id)s/'}), ) This example issues a non-permanent redirect (HTTP status code 302) from ``/foo//`` to ``/bar//``:: urlpatterns = patterns('django.views.generic.simple', ('^foo/(?P\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_future`` を ``True`` にしない限り、 *未来の* 日付のオブジェ クトは表示しません。 **必須の引数:** * ``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`` です。 .. versionadded:: 1.0 * ``template_object_name``: テンプレートコンテキストをテンプレート変数 として渡すときの名前です。デフォルト値は ``'latest'`` です。 **テンプレート名:** ``template_name`` を指定しない場合、ビューはデフォルトのテンプレートである ``/_archive.html`` を使います。ここで: * ```` はモデル名を全て小文字にしたものです。例えば ``StaffMember`` というモデルの場合は ``staffmember`` になります。 * ```` はモデルアプリケーションへの Python パスの最も右側の 部分になります。例えば、モデルが ``apps/blog/models.py`` に入っていれ ば ``blog`` になります。 **テンプレートコンテキスト:** ``extra_context`` の値に加え、テンプレートのコンテキストには以下の変数が入 ります: * ``date_list``: ``queryset`` を介してオブジェクトを取得できる年を表す ``datetime.date`` オブジェクトのリストです。リストは逆順に並んでいま す。 ``queryset.dates(date_field, 'year')[::-1]`` と等価です。 .. versionchanged:: 1.0 ``template_object_name`` に応じて動作が変わるようになりました。 * ``latest``: ``date_field`` の順に並んだ ``num_latest`` 個のオブジェク トです。例えば、 ``num_latest`` が ``10`` であれば、 ``latest`` は ``queryset`` 内のオブジェクトのうち、最新の 10 個からなるリストです。 変数の名前は ``template_object_name`` パラメタで変更できます。デフォ ルト値は ``'latest'`` です。例えば、 ``template_object_name`` を ``'foo'`` にしたときの変数名は ``foo`` です。 ``django.views.generic.date_based.archive_year`` ------------------------------------------------ **解説:** 指定年でオブジェクトのある月のリストを表示する、年ごとのアーカイブページで す。 ``allow_future`` を ``True`` にしない限り、 *未来の* 日付のオブジェク トは表示しません。 **必須の引数:** * ``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`` を指定しない場合、ビューはデフォルトのテンプレートである ``/_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_list`` が ``False`` の場合、 ``object_list`` は空のリス トとしてテンプレートに渡されます。 ``django.views.generic.date_based.archive_month`` ------------------------------------------------- **解説:** 指定月の全てのオブジェクトのリストを表示する、月ごとのアーカイブページです。 ``allow_future`` を ``True`` にしない限り、 *未来の* 日付のオブジェクトは表 示しません。 **必須の引数:** * ``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`` を指定しない場合、ビューはデフォルトのテンプレートである ``/_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`` になります。 .. _`strftime のドキュメント`: http://www.python.jp/doc/release/lib/module-time.html#l2h-1915 .. _strftime docs: http://www.python.org/doc/current/lib/module-time.html#l2h-1915 ``django.views.generic.date_based.archive_week`` ------------------------------------------------ **解説:** 指定週の全てのオブジェクトのリストを表示する、週ごとのアーカイブページです。 ``allow_future`` を ``True`` にしない限り、 *未来の* 日付のオブジェクトは表 示しません。 **必須の引数:** * ``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`` を指定しない場合、ビューはデフォルトのテンプレートである ``/_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_future`` を ``True`` にしない限り、 *未来の* 日付のオブジェクトを表 示させようとすると、該当するオブジェクトの有無にかかわらず 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`` を指定しない場合、ビューはデフォルトのテンプレートである ``/_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_future`` を ``True`` にしない限り、このビューはデフォ ルトで 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_field`` に ``QuerySet`` に指定したモデルの 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`` を指定しない場合、ビューはデフォルトのテンプレートである ``/_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 に関する注意 <#ref-genericview-notes-on-paginateion>`_ 」を参照してください。 * ``page``: 現在のページ番号を指定する 1 から始まる整数値か、文字列 ``'last'`` です。詳しくは下記の「 `pagination に関する注意 <#ref-genericview-notes-on-paginateion>`_ 」を参照 してください。 * ``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`` を指定しない場合、ビューはデフォルトのテンプレートである ``/_list.html`` を使います。 **テンプレートコンテキスト:** .. versionadded:: 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`` のインスタンスです。 .. _ref-genericview-notes-on-paginateion: ペジネーションに関する注意 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ``paginate_by`` を指定した場合、 Django は結果をページ分割 (ペジネーション) します。 URL でページ番号を指定するには二つの方法があります: * URLconf で ``page`` パラメタをキャプチャします。例えば、 URLconf は以 下のようになるでしょう:: (r'^objects/page(?P[0-9]+)/$', 'object_list', dict(info_dict)) * ページ番号をクエリ文字列パラメタ ``page`` に渡します。例えば URL は以 下のようになります:: /objects/?page=3 * 全てのページ番号にわたるループを実施したい場合は、 ``page_range`` を 使ってください。例えば、``page_range`` にわたる反復処理を行って、 全てのページへのリンクを作成できます。 ``page`` や ``page_range`` は 0 ではなく 1 から始まる数で指定します。従って 最初のページのページ番号は ``1`` です。 ペジネーションの詳細は、 :ref:`Pagination のドキュメント` を参照してください。 .. versionadded:: 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_field`` に ``QuerySet`` に指定したモデルの 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`` を指定しない場合、ビューはデフォルトのテンプレートである ``/_detail.html`` を使います。 **テンプレートコンテキスト:** ``extra_context`` の値に加え、テンプレートのコンテキストには以下の変数が入 ります: * ``object``: オブジェクトです。この変数変の名前は ``template_object_name`` パラメタの値に依存し、そのデフォルト値は ``'object'`` です。 ``template_object_name`` が ``'foo'`` の場合、変 数名は ``foo`` になります。 作成/更新/削除の汎用ビュー ========================== ``django.views.generic.create_update`` モジュールには、オブジェクトの作成 (create)、編集 (edit, update)、削除 (delete) のための関数が入っています。 .. versionchanged:: 1.0 ``django.views.generic.create_update.create_object`` や ``django.views.generic.create_update.update_object`` は、 :ref:`forms ライブラリ ` を使ってフォームを生成・表示す るようになりました。 ``django.views.generic.create_update.create_object`` ---------------------------------------------------- **解説:** オブジェクト作成のためのフォームを表示し、オブジェクトを保存するためのペー ジです。検証エラーが生じた場合にはフォームを再表示します。 **必須の引数:** * ``form_class`` または ``model`` のいずれかを指定せねばなりません。 ``form_class`` を指定する場合には、 ``django.forms.ModelForm`` クラスのサブクラスを指定します。この引数は、モデルのフォームをカスタ マイズしたいときに使います。詳しくは :ref:`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 の :ref:`認証システム ` にフックをかけます。デフォルト値は ``False`` です。 この値が ``True`` の場合、匿名ユーザがこのページを訪問したりフォーム を保存しようとしたりすると、 Django はリクエストを ``/accounts/login/`` にリダイレクトします。 * ``template_name``: ページのレンダリングに使うテンプレートの完全な名前 です。この変数を使うと、デフォルトのテンプレート名 (下記参照) をオー バライドできます。 * ``template_loader``: テンプレートのロードに使うテンプレートローダです。 デフォルトでは ``django.template.loader`` になっています。 * ``extra_context``: テンプレートコンテキストに追加する値からなる辞書で す。デフォルトでは、この辞書は空になっています。辞書内の値が呼び出し 可能オブジェクトの場合、汎用ビューはテンプレートのレンダリング直前に そのオブジェクトを呼び出します。 * ``context_processors``: ビューのテンプレートに適用するテンプレートコ ンテキストプロセッサのリストです。 **テンプレート名:** ``template_name`` を指定しない場合、ビューはデフォルトのテンプレートである ``/_form.html`` を使います。 **テンプレートコンテキスト:** ``extra_context`` の値に加え、テンプレートのコンテキストには以下の変数が入 ります: * ``form``: オブジェクトを編集するためのフォームを表現する ``django.forms.ModelForm`` インスタンスです。この変数を使うと、テ ンプレートシステム中でフォームフィールドを簡単に参照できます。 例えば、モデルが ``name`` と ``address`` という二つのフィールドを持っ ている場合は、以下のように書けます::

{{ form.name.label_tag }} {{ form.name }}

{{ form.address.label_tag }} {{ form.address }}

``Form`` オブジェクトをテンプレート内で使う方法の詳しい説明は、 :ref:`forms のドキュメント ` を参照してください。 ``django.views.generic.create_update.update_object`` ---------------------------------------------------- **解説:** 既存のオブジェクトを編集するためのフォームを表示し、オブジェクトを保存する ためのページです。検証エラーが生じた場合にはフォームを再表示します。 **必須の引数:** * ``form_class`` または ``model`` のいずれかを指定せねばなりません。 ``form_class`` を指定する場合には、 ``django.forms.ModelForm`` クラスのサブクラスを指定します。この引数は、モデルのフォームをカスタ マイズしたいときに使います。詳しくは :ref:`ModelForm のドキュメント ` を参照して ください。 ``model`` には Django のモデルクラスを指定します。この場合、フォーム は ``model`` に対する標準の ``ModelForm`` で生成されます。 * ``object_id`` または (``slug`` *と* ``slug_field``) が必要です。 ``object_id`` を使う場合、ページに表示するオブジェクトの主キーとなる フィールドの値を指定せねばなりません。 そうでない場合には、 ``slug`` にオブジェクトの slug を、 ``slug_field`` に ``QuerySet`` に指定したモデルの slug フィールド名を 指定せねばなりません。 ``slug_field`` のデフォルト値は ``'slug'`` で す。 **オプションの引数:** * ``post_save_redirect``: オブジェクトを保存した後のビューのリダイレ クト先 の URL です。デフォルト値は ``object.get_absolute_url()`` です。 ``post_save_redirect`` には辞書を使う文字列フォーマット引数が入ります。 辞書のキーはオブジェクトのフィールド名に解釈されます。例えば、 ``post_save_redirect="/polls/%(slug)s/"`` のように指定できます。 * ``login_required``: オブジェクトを編集し、変更を保存するため編集にロ グインが必要かどうかを指定するブール値です。 Django の :ref:`認証システム ` にフックをかけます。デフォルト値は ``False`` です。 この値が ``True`` の場合、匿名ユーザがこのページを訪問したりフォーム を保存しようとしたりすると、 Django はリクエストを ``/accounts/login/`` にリダイレクトします。 * ``template_name``: ページのレンダリングに使うテンプレートの完全な名前 です。この変数を使うと、デフォルトのテンプレート名 (下記参照) をオー バライドできます。 * ``template_loader``: テンプレートのロードに使うテンプレートローダです。 デフォルトでは ``django.template.loader`` になっています。 * ``extra_context``: テンプレートコンテキストに追加する値からなる辞書で す。デフォルトでは、この辞書は空になっています。辞書内の値が呼び出し 可能オブジェクトの場合、汎用ビューはテンプレートのレンダリング直前に そのオブジェクトを呼び出します。 * ``context_processors``: ビューのテンプレートに適用するテンプレートコ ンテキストプロセッサのリストです。 * ``template_object_name``: テンプレートコンテキスト内で使うテンプレー ト変数名を示します。デフォルトでは ``'object'`` になっています。 **テンプレート名:** ``template_name`` を指定しない場合、ビューはデフォルトのテンプレートである ``/_form.html`` を使います。 **テンプレートコンテキスト:** ``extra_context`` の値に加え、テンプレートのコンテキストには以下の変数が入 ります: * ``form``: オブジェクトを編集するためのフォームを表現する ``django.oldforms.ModelForm`` インスタンスです。この変数を使うと、テ ンプレートシステム中でフォームフィールドを簡単に参照できます。 例えば、モデルが ``name`` と ``address`` という二つのフィールドを持っ ている場合は、以下のように書けます::

{{ form.name.label_tag }} {{ form.name }}

{{ form.address.label_tag }} {{ form.address }}

``Form`` オブジェクトをテンプレート内で使う方法の詳しい説明は、 :ref:`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_field`` に ``QuerySet`` に指定したモデルの slug フィールド名を 指定せねばなりません。 ``slug_field`` のデフォルト値は ``'slug'`` で す。 * ``post_delete_redirect``: オブジェクトを削除した後のビューのリダイレ クト先 の URL です。 **オプションの引数:** * ``login_required``: ページを表示し、変更を保存するため編集にログイン が必要かどうかを指定するブール値です。 Django の :ref:`認証システム ` にフックをかけます。デフォルト値は ``False`` です。 この値が ``True`` の場合、匿名ユーザがこのページを訪問したりフォーム を保存しようとしたりすると、 Django はリクエストを ``/accounts/login/`` にリダイレクトします。 * ``template_name``: ページのレンダリングに使うテンプレートの完全な名前 です。この変数を使うと、デフォルトのテンプレート名 (下記参照) をオー バライドできます。 * ``template_loader``: テンプレートのロードに使うテンプレートローダです。 デフォルトでは ``django.template.loader`` になっています。 * ``extra_context``: テンプレートコンテキストに追加する値からなる辞書で す。デフォルトでは、この辞書は空になっています。辞書内の値が呼び出し 可能オブジェクトの場合、汎用ビューはテンプレートのレンダリング直前に そのオブジェクトを呼び出します。 * ``context_processors``: ビューのテンプレートに適用するテンプレートコ ンテキストプロセッサのリストです。 * ``template_object_name``: テンプレートコンテキスト内で使うテンプレー ト変数名を示します。デフォルトでは ``'object'`` になっています。 **テンプレート名:** ``template_name`` を指定しない場合、ビューはデフォルトのテンプレートである ``/_confirm_delete.html`` を使います。 **テンプレートコンテキスト:** ``extra_context`` の値に加え、テンプレートのコンテキストには以下の変数が入 ります: * ``object``: オブジェクトです。この変数変の名前は ``template_object_name`` パラメタの値に依存し、そのデフォルト値は ``'object'`` です。 ``template_object_name`` が ``'foo'`` の場合、変 数名は ``foo`` になります。