# Django 4.1.8.dev20230308103347 ドキュメント

# Paginator

Django provides a few classes that help you manage paginated data -- that is, data that's split across several pages, with "Previous/Next" links. These classes live in django/core/paginator.py.

For examples, see the Pagination topic guide.

## `Paginator` class

class `Paginator`(object_list, per_page, orphans=0, allow_empty_first_page=True)

  A paginator acts like a sequence of `Page` when using `len()` or iterating it directly.

`Paginator.``object_list`

  Required. A list, tuple, `QuerySet`, or other sliceable object with a `count()` or `__len__()` method. For consistent pagination, `QuerySet`s should be ordered, e.g. with an `order_by()` clause or with a default `ordering` on the model.

  巨大な `QuerySet` のページネーションによるパフォーマンス上の問題

  非常に多数のアイテムを持つ `QuerySet` を使用した場合、数の大きいページをリクエストした時位に、データベースによっては速度が低下する場合があります。これは、`OFFSET` 数を数えるために必要な `LIMIT`/`OFFSET` クエリの処理時間が、ページ数が増えるにつれて長くなってしまうためです。

`Paginator.``per_page`

  Required. The maximum number of items to include on a page, not including orphans (see the `orphans` optional argument below).

`Paginator.``orphans`

  Optional. Use this when you don't want to have a last page with very few items. If the last page would normally have a number of items less than or equal to `orphans`, then those items will be added to the previous page (which becomes the last page) instead of leaving the items on a page by themselves. For example, with 23 items, `per_page=10`, and `orphans=3`, there will be two pages; the first page with 10 items and the second (and last) page with 13 items. `orphans` defaults to zero, which means pages are never combined and the last page may have one item.

`Paginator.``allow_empty_first_page`

  Optional. Whether or not the first page is allowed to be empty. If `False` and `object_list` is empty, then an `EmptyPage` error will be raised.

### メソッド

`Paginator.``get_page`(number)

  1から始まるインデックスをもつ `Page` オブジェクトを返します。このオブジェクトは、範囲外のページ数や無効なページ数もハンドリングします。

  与えられた値が数字でなかった場合は、最初のページを返します。ページ数が負の数や全体のページ数より大きかった場合は、最後のページを返します。

  Raises an `EmptyPage` exception only if you specify `Paginator(..., allow_empty_first_page=False)` and the `object_list` is empty.

`Paginator.``page`(number)

  Returns a `Page` object with the given 1-based index. Raises `PageNotAnInteger` if the `number` cannot be converted to an integer by calling `int()`. Raises `EmptyPage` if the given page number doesn't exist.

`Paginator.``get_elided_page_range`(number, *, on_each_side=3, on_ends=2)

  Returns a 1-based list of page numbers similar to `Paginator.page_range`, but may add an ellipsis to either or both sides of the current page number when `Paginator.num_pages` is large.

  The number of pages to include on each side of the current page number is determined by the `on_each_side` argument which defaults to 3.

  The number of pages to include at the beginning and end of page range is determined by the `on_ends` argument which defaults to 2.

  For example, with the default values for `on_each_side` and `on_ends`, if the current page is 10 and there are 50 pages, the page range will be `[1, 2, '…', 7, 8, 9, 10, 11, 12, 13, '…', 49, 50]`. This will result in pages 7, 8, and 9 to the left of and 11, 12, and 13 to the right of the current page as well as pages 1 and 2 at the start and 49 and 50 at the end.

  Raises `InvalidPage` if the given page number doesn't exist.

### 属性

`Paginator.``ELLIPSIS`

  A translatable string used as a substitute for elided page numbers in the page range returned by `get_elided_page_range()`. Default is `'…'`.

`Paginator.``count`

  すべてのページに渡るオブジェクト全体の数です。

  注釈

  When determining the number of objects contained in `object_list`, `Paginator` will first try calling `object_list.count()`. If `object_list` has no `count()` method, then `Paginator` will fall back to using `len(object_list)`. This allows objects, such as `QuerySet`, to use a more efficient `count()` method when available.

`Paginator.``num_pages`

  トータルのページ数

`Paginator.``page_range`

  1から始まるページ数の範囲のイテレータです。たとえば、`[1, 2, 3, 4]` を生成します。

## `Page` class

You usually won't construct `Page` objects by hand -- you'll get them by iterating `Paginator`, or by using `Paginator.page()`.

class `Page`(object_list, number, paginator)

  1つのページは、`len()` を使ったり直接イテレーションした時、`Page.object_list` のシーケンスのように振る舞います。

### メソッド

`Page.``has_next`()

  次のページが存在する時、`True` を返します。

`Page.``has_previous`()

  前のページが存在する時、`True` を返します。

`Page.``has_other_pages`()

  Returns `True` if there's a next or previous page.

`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`

  pagenator に無効なページ数が渡された時に発生する例外のベースクラスです。

The `Paginator.page()` method raises an exception if the requested page is invalid (i.e. not an integer) or contains no objects. Generally, it's enough to catch the `InvalidPage` exception, but if you'd like more granularity, you can catch either of the following exceptions:

exception `PageNotAnInteger`

  Raised when `page()` is given a value that isn't an integer.

exception `EmptyPage`

  Raised when `page()` is given a valid value but no objects exist on that page.

Both of the exceptions are subclasses of `InvalidPage`, so you can handle them both with `except InvalidPage`.