from django.core.paginator import Paginator
from example.models import Example
def example_view(request):
example_data_list = Example.objects.all()
paginator = Paginator(exampe_data_list, 30) # 30개씩 페이지를 나눈다.
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
context = {
'page_obj': page_obj
}
return render(request, 'my_template.html', context)
page_obj = Paginator.get_page(2) # 2번째 페이지 데이터를 가져옴
data_list = page_obj.object_list # 현재 페이지의 데이터를 리스트로 가져온다.
# Page 클래스가 제공하는 기능
"""
object_list: 페이지에 속한 객체들의 리스트를 반환
has_previous: 현재 페이지 이전 페이지가 있는지 여부를 반환
has_next: 현재 페이지 다음 페이지가 있는지 여부 반환
previous_page_number: 현재 페이지의 이전 페이지 번호를 반환
next_page_number: 현재 페이지의 다음 페이지 번호를 반환
has_other_pages: 현재 페이지 이외에 다른 페이지가 있는지 여부를 반환
start_index: 현재 페이지의 시작 인덱스 반환
end_index: 현재 페이지의 끝 인덱스 반
"""
__init__(self, object_list, per_page, orphans=0, allow_empty_first_page=True)
"""
object_list: 페이지네이션 대상 객체
per_page: 한 페이지에 보여질 객체의 수
orphans: 마지막 페이지에서 몇 개의 객체가 남았을 때 그 갯수
allow_empty_first_poage: 첫 페이지에 데이터가 없을 때도 페이지를 보여줄 것인지
count: 총 갯수 반환
num_pages: 페이지의 총 갯수 반환
page(self, number): 주어진 페이지 번호에 해당하는 'Page' 객체 반
"""
PageNotAnInteger
일반적으로 1페이지를 보여주도록 처리하는 예시
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def my_view(request):
my_objects = MyModel.objects.all()
paginator = Paginator(my_objects, 25)
page_number = request.GET.get('page')
try:
page_obj = paginator.get_page(page_number)
# 예외 발생 시 1페이지 반환
except PageNotAnInteger:
page_obj = paginator.get_page(1)
# 예외 발생 시 마지막 페이지 반
except EmptyPage:
page_obj = paginator.get_page(paginator.num_pages)
context = {
'page_obj': page_obj
}
return render(request, 'my_template.html', context)