Paginator

確認したファイル

  • django/core/paginator.py

参考サイト

実際に試してみる

  • QuerySetPaginatorを使ってみる
QuerySetPaginator(object_list, per_page, orphans=0, allow_empty_first_page=True)
object_list QuerySet
per_page 1ページの表示件数
orphans=0 最小ページ数
allow_empty_first_page=True 空を許すか
  • 必要そうなものを取得してみる。

 参考にしたのは「django/views/generic/list_detail.py」

is_paginated ページがあるか?
has_next 次のページがあるか?
has_previous 前のページがあるか?
page 現在のページ番号
next 次のページ番号
previous 前のページ番号
pages 全ページ数
hits 全object数

まず現在のページはデフォルトで「1」とする。 1ページ表示させる件数は「2」とする。 objectのカウント数は「5」とする。

# 1ページの表示件数
>>> per_page = 2
# 現在のページ数
>>> page = 1
# object_list
>>> object_list = Spam.objects.filter(object_id=object_id)
>>> print object_list.count()
5
>>> paginator = QuerySetPaginator(object_list, per_page, orphans=0, allow_empty_first_page=True)
<django.core.paginator.QuerySetPaginator object at 0xb7190d8c>

is_paginated(ページがあるか?)

>>> page_number = 1
>>> page_obj = paginator.page(page_number)
>>> print page_obj
<Page 1 of 3>
>>> is_paginated = page_obj.has_other_pages()
>>> print is_paginated
True

has_next(次のページがあるか?)

1ページ目の場合

>>> page_number = 1
>>> page_obj = paginator.page(page_number)
>>> print page_obj
<Page 1 of 3>
>>> has_next = page_obj.has_next()
>>> print has_next
True

3ページ目の場合

>>> page_number = 3
>>> page_obj = paginator.page(page_number)
>>> print page_obj
<Page 3 of 3>
>>> has_next = page_obj.has_next()
>>> print has_next
False

has_previous(前のページがあるか?)

1ページ目の場合

>>> page_number = 1
>>> page_obj = paginator.page(page_number)
>>> print page_obj
<Page 1 of 3>
>>> has_previous = page_obj.has_previous()
>>> print has_previous
False

3ページ目の場合

>>> page_number = 3
>>> page_obj = paginator.page(page_number)
>>> print page_obj
<Page 1 of 3>
>>> has_previous = page_obj.has_previous()
>>> print has_previous
True

page(現在のページ番号)

>>> page_number = 1
>>> page_obj = paginator.page(page_number)
>>> print page_obj
<Page 1 of 3>
>>> page = page_obj.number
>>> print page
1

next(次のページ番号)

>>> page_number = 1
>>> page_obj = paginator.page(page_number)
>>> print page_obj
<Page 1 of 3>
>>> next = page_obj.next_page_number()
>>> print next
2

previous(前のページ番号)

>>> page_number = 3
>>> page_obj = paginator.page(page_number)
>>> print page_obj
<Page 3 of 3>
>>> previous = page_obj.previous_page_number()
>>> print previous
2

pages(全ページ数)

>>> print paginator.num_pages
3

hits(全object数)

>>> print paginator.count
5

ほか

>>> print paginator.page_range
[1, 2, 3]
>>> print page_obj.start_index()
1
>>> print page_obj.end_index()
2