複数オブジェクトミックスイン (Multiple object mixin)

MultipleObjectMixin

class django.views.generic.list.MultipleObjectMixin

オブジェクトのリストを表示するために使用する Mixin です。

paginate_by が指定された場合、Django は結果をページネートします。URL 内のページ数は以下のいずれかの方法で指定します:

  • URLconf 内で page パラメータを使用します。例えば、URLconf は以下のようになります:

    path("objects/page<int:page>/", PaginatedView.as_view()),
    
  • ページ番号は page クエリ文字列パラメータで渡します。例えば、URLは以下のようになります:

    /objects/?page=3
    

これらの値は (0 ベースではなく) 1 ベースなので、最初のページはページ 1 で表示されます。

ページ分割の詳細については、ページ分割のドキュメント を参照してください。

特別なケースとして、 lastpage の値として使用することもできます:

/objects/?page=last

これによって、自分で何ページ存在するかを調べることなく、最後のページにアクセスできます。

注意すべきなのは、page は有効なページ数ないし値 lastどちらかでなければならない ことです。page に対する他の値はすべて 404 エラーとなります。

親クラス

メソッドと属性

allow_empty

有効なオブジェクトが 1 つもない場合にページを表示するかどうかを指定する真偽値です。False に指定してオブジェクトが存在しない場合、空のページの代わりに 404 を投げます。デフォルトは True です。

model

このビューがデータを表示する対象のモデルです。model = Foo と指定することは、queryset = Foo.objects.all() の効率的な書き方で、 objectsFooデフォルトマネージャ を表します。

queryset

オブジェクトを表す QuerySet です。指定すると、queryset の値は model の結果を上書きします。

警告

querysetミュータブル(編集可能)な 値を伴うクラスの属性なので、直接使用する際には注意が必要です。この属性を使用する際は、 all() メソッドを呼び出すか、内部で複製処理を行う get_queryset() でこれを取得するようにしてください。

ordering

queryset に適用される並び順を指定するための文字列ないし文字列のリストです。order_by() に対するものと同じ値が有効です。

paginate_by

何個のオブジェクトが各ページに表示されるべきかを指定する数値です。この値が指定されると、各ページにおいて paginate_by 数のオブジェクトをページネートします。ビューには (request.GET を通じた) page クエリ文字列パラメータ、もしくは URLconf で page 変数が指定されることを必要とします。

paginate_orphans

最後のページが含むことができる "はみ出た" オブジェクトの数を指定する数値です。最後のページで、paginate_by の制限を最大で paginate_orphans の値まで拡張し、最後のページでほんの少しのオブジェクトしか表示されないことを防ぎます。

page_kwarg

ページのパラメータに使用する名前を指定する文字列です。ビューは (request.GET を通じた) クエリ文字列パラメータ、もしくはURLconf 内で指定した kwarg が有効になっていることを必要とします。デフォルトは page です。

paginator_class

ページ分割に使用する paginator クラス。デフォルトでは django.core.paginator.Paginator が使用されます。カスタムの paginator クラスが django.core.paginator.Paginator と同じコンストラクタのインターフェースを持っていない場合は、 get_paginator() の実装も用意する必要があります。

context_object_name

コンテキストで使用する変数名を指定します。

get_queryset()

このビューのための項目のリストを取得します。これは必ずイテラブルにするべきであり、クエリセットにされることが多いです(クエリセット特有の動作を有効にするため)。

get_ordering()

queryset に適用される順序を定義する、文字列(または文字列のイテラブル)を返します。

デフォルトでは ordering を返します。

paginate_queryset(queryset, page_size)

(paginator, page, object_list, is_paginated) を含む 4-タプルを返します。

queryset をページ分割して page_size サイズのページを作成します。リクエストに page 引数(キャプチャ URL 引数または GET 引数)が含まれている場合、 object_list はそのページのオブジェクトに対応します。

get_paginate_by(queryset)

ページ分割を行うアイテムの数を返します。ページ分割を行わない場合は None を返します。デフォルトの戻り値は paginate_by です。

get_paginator(queryset, per_page, orphans=0, allow_empty_first_page=True)

このビューで使用する paginator のインスタンスを返します。デフォルトでは paginator_class のインスタンスを作成します。

get_paginate_orphans()

最後のページが含むことができる "overflow" オブジェクトの数を表す整数です。デフォルトでは paginate_orphans の値を返します。

get_allow_empty()

オブジェクトがない場合にページを表示するかどうかを表す真偽値を返します。このメソッドが False を返し、利用可能なオブジェクトがない場合、ビューは空のページを表示する代わりに 404 を送出します。デフォルトでは True です。

get_context_object_name(object_list)

このビューが操作しているデータのリストを格納するために使用される、コンテキストの変数名を返します。もし object_list がDjangoオブジェクトのクエリセットであり、 context_object_name が設定されていない場合、コンテキスト名はクエリセットを構成するモデルの model_name となり、接尾語として '_list' が付記されます。たとえば、 Article モデルなら article_list という名前のコンテキストオブジェクトを保持します。

get_context_data(**kwargs)

オブジェクトのリストを表示するためのコンテキストデータを返します。

コンテキスト

  • object_list: このビューが表示しているオブジェクトのリスト。もし context_object_name が指定された場合、その変数も object_list と同じ値でコンテキストに設定されます。

  • is_paginated: 結果がページ分割されているかどうかを表す真偽値。具体的には、ページサイズが指定されていない場合や、利用可能なオブジェクトが複数ページにまたがっていない場合に False に設定されます。

  • paginator: django.core.paginator.Paginator のインスタンスです。ページがページ分割されていない場合、このコンテキスト変数は None になります。

  • page_obj: django.core.paginator.Page のインスタンスです。ページがページ分割されていない場合、このコンテキスト変数は None になります。

MultipleObjectTemplateResponseMixin

class django.views.generic.list.MultipleObjectTemplateResponseMixin

オブジェクトインスタンスのリストを操作するビューに対してテンプレートベースのレスポンスレンダリングを行うミックスインクラスです。ミックスするビューが self.object_list を提供する必要があります。 self.object_list は、ビューが操作するオブジェクトインスタンスのリストです。 self.object_listQuerySet でも大丈夫で、必須ではありません。

親クラス

メソッドと属性

template_name_suffix

自動生成される候補テンプレート名に付加する接尾辞。デフォルトの接尾辞は _list です。

get_template_names()

テンプレート名の候補のリストを返します。以下のリストを返します:

  • ビューの template_name の値 (もしあれば)

  • <app_label>/<model_name><template_name_suffix>.html

Back to Top