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. IfTrue
, then the redirect will use status code 301. IfFalse
, then the redirect will use status code 302. By default,permanent
isTrue
.
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_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
です。
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_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
を指定しない場合、ビューはデフォルトのテンプレートである
<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_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
を指定しない場合、ビューはデフォルトのテンプレートである
<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_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
を指定しない場合、ビューはデフォルトのテンプレートである
<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_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
を指定しない場合、ビューはデフォルトのテンプレートである
<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_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
を指定しない場合、ビューはデフォルトのテンプレートである
<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
にわたる反復処理を行って、 全てのページへのリンクを作成できます。
page
や page_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_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
を指定しない場合、ビューはデフォルトのテンプレートである
<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_object
や
django.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
インスタンスです。この変数を使うと、テ ンプレートシステム中でフォームフィールドを簡単に参照できます。例えば、モデルが
name
とaddress
という二つのフィールドを持っ ている場合は、以下のように書けます:<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_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 の 認証システム にフックをかけます。デフォルト値は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
インスタンスです。この変数を使うと、テ ンプレートシステム中でフォームフィールドを簡単に参照できます。例えば、モデルが
name
とaddress
という二つのフィールドを持っ ている場合は、以下のように書けます:<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_field
にQuerySet
に指定したモデルの 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
になります。
Oct 26, 2017