ページネーター
Djangoは、ページ付けされたデータ、つまり「前へ/次へ」リンクを使用して複数のページに分割されたデータの管理に役立ついくつかのクラスを提供します。 これらのクラスは:source: `django / core / paginator.py` にあります。
Paginatorクラス
- class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)
- Paginator.object_list
必須。 リスト、タプル、
QuerySet
、またはcount()
または__len__()
メソッドを使用するその他のスライス可能なオブジェクト。 一貫したページ付けを行うには、QuerySet
を注文する必要があります。 order_by()句を使用するか、モデルのデフォルトの ordering を使用します。大きな
QuerySet
をページングするパフォーマンスの問題非常に多くのアイテムで
QuerySet
を使用している場合、結果のLIMIT
/OFFSET
クエリは次のことを行う必要があるため、一部のデータベースでは高いページ番号のリクエストが遅くなる可能性があります。OFFSET
レコードの数を数えます。これは、ページ番号が大きくなるにつれて時間がかかります。
- Paginator.per_page
- 必須。 孤立を含まない、ページに含めるアイテムの最大数(以下の孤立オプションの引数を参照)。
- Paginator.orphans
- オプション。 アイテムが非常に少ない最後のページを作成したくない場合に使用します。 通常、最後のページに
orphans
以下のアイテムが含まれている場合、それらのアイテムは、アイテムを単独でページに残すのではなく、前のページ(最後のページになります)に追加されます。 。 たとえば、per_page=10
とorphans=3
の23個のアイテムでは、2つのページがあります。 最初のページには10個のアイテムがあり、2番目(および最後)のページには13個のアイテムがあります。orphans
のデフォルトはゼロです。これは、ページが結合されることはなく、最後のページに1つのアイテムが含まれる可能性があることを意味します。
- Paginator.allow_empty_first_page
- オプション。 最初のページを空にすることができるかどうか。
False
およびobject_list
が空の場合、EmptyPage
エラーが発生します。
メソッド
- Paginator.get_page(number)
指定された1ベースのインデックスを持つ Page オブジェクトを返しますが、範囲外および無効なページ番号も処理します。
ページが数字でない場合は、最初のページが返されます。 ページ番号が負の場合、またはページ数より大きい場合は、最後のページが返されます。
Paginator(..., allow_empty_first_page=False)
を指定し、object_list
が空の場合にのみ、 EmptyPage 例外を発生させます。
- Paginator.page(number)
- 指定された1ベースのインデックスを持つ Page オブジェクトを返します。 指定されたページ番号が存在しない場合、 InvalidPage を発生させます。
属性
- Paginator.count
すべてのページにわたるオブジェクトの総数。
ノート
object_list
に含まれるオブジェクトの数を決定するとき、Paginator
は最初にobject_list.count()
を呼び出そうとします。object_list
にcount()
メソッドがない場合、Paginator
はlen(object_list)
の使用にフォールバックします。 これにより、QuerySet
などのオブジェクトは、使用可能な場合、より効率的なcount()
メソッドを使用できます。
- Paginator.num_pages
- 総ページ数。
- Paginator.page_range
- ページ番号の1ベースの範囲イテレータ。
[1, 2, 3, 4]
を生成します。
Pageクラス
通常、Page
オブジェクトを手動で作成することはありません。 Paginator.page()を使用して取得します。
- class Page(object_list, number, paginator)
len()
を使用する場合、または直接反復する場合、ページは Page.object_list のシーケンスのように機能します。
メソッド
- Page.has_next()
- 次のページがある場合は
True
を返します。
- Page.has_previous()
- 前のページがある場合は
True
を返します。
- Page.has_other_pages()
- 次のまたはの前のページがある場合は、
True
を返します。
- Page.next_page_number()
- 次のページ番号を返します。 次のページが存在しない場合、 InvalidPage を発生させます。
- Page.previous_page_number()
- 前のページ番号を返します。 前のページが存在しない場合、 InvalidPage を発生させます。
- Page.start_index()
- ページネーターのリスト内のすべてのオブジェクトを基準にした、ページ上の最初のオブジェクトの1から始まるインデックスを返します。 たとえば、5つのオブジェクトのリストをページごとに2つのオブジェクトでページ分割する場合、2番目のページの start_index()は
3
を返します。
- Page.end_index()
- ページネーターのリスト内のすべてのオブジェクトを基準にした、ページの最後のオブジェクトの1から始まるインデックスを返します。 たとえば、5つのオブジェクトのリストをページごとに2つのオブジェクトでページ分割する場合、2番目のページの end_index()は
4
を返します。
属性
- Page.object_list
- このページのオブジェクトのリスト。
- Page.number
- このページの1から始まるページ番号。
- Page.paginator
- 関連する Paginator オブジェクト。
例外
- exception InvalidPage
- ページネーターに無効なページ番号が渡されたときに発生する例外の基本クラス。
Paginator.page()メソッドは、要求されたページが無効な場合(つまり、 整数ではありません)またはオブジェクトが含まれていません。 通常、InvalidPage
例外をキャッチするだけで十分ですが、より細かくしたい場合は、次のいずれかの例外をキャッチできます。
- exception PageNotAnInteger
- page()に整数以外の値が指定された場合に発生します。
- exception EmptyPage
- page()に有効な値が指定されているが、そのページにオブジェクトが存在しない場合に発生します。
どちらの例外も InvalidPage のサブクラスであるため、except InvalidPage
で両方を処理できます。