본문 바로가기

Python/Django

[Django] pagination은 뭐야?

728x90

pagination은 django 프로젝트 진행에 있어 이전, 다음과 같이 오브젝트를 나누어 보여주어야 할 때 사용하기 유용합니다. 다음은 Paginator 패키지를 가져오는 코드와 테스트 데이터입니다. 코드 설명에 있는 # 뒷부분은 모두 코드를 실행시킬 때 출력되는 결과를 적어놓은 것입니다.

 

from django.core.paginator import Paginator

objects = ['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7', 'item8']

 

테스트 데이터는 총 8개로 이뤄져있습니다. 8개의 데이터를 4개씩 나누어서 예제를 진행하겠습니다. 코드는 다음과 같습니다.

 

page = Paginator(objects, 4)

 

Paginator 함수 안에 objects와 나누고 싶은 아이템의 수를 입력하면 됩니다.

 

# page count: 8
print(f'page count: {page.count}')
# page range: range(1, 3)
print(f'page range: {page.page_range}')

 

위의 코드는 Paginator 객체인 page에 들어있는 오브젝트의 전체 개수와 페이지의 범위를 출력하는 코드입니다. page range에서 range(1, 3)은 1~2까지의 페이지를 가진다는 의미입니다.

 

# object list of page 1: ['item1', 'item2', 'item3', 'item4']
page1 = page.page(1)
print(f'object list of page 1: {page1.object_list}')

# object list of page 2: ['item5', 'item6', 'item7', 'item8']
page2 = page.page(2)
print(f'object list of page 2: {page2.object_list}')

 

위의 코드에서 page 1은 page객체에 있는 첫 번째 page의 정보를 가지는 것이고, page 2는 page객체에 있는 두 번째 page의 정보를 가지는 것입니다. object_list 함수를 사용하여 page 1과 page 2에 있는 오브젝트의 정보를 출력합니다. 테스트 데이터의 정보가 4개씩 저장된 것을 확인할 수 있습니다.

 

# page1 has next page? True
print(f'page1 has next page? {page1.has_next()}')
# page1 has previous page? False
print(f'page1 has previous page? {page1.has_previous()}')
# next page number is 2
print(f'next page number is {page1.next_page_number()}')
# what is page1's start index? 1
print(f'what is page1\'s start index? {page1.start_index()}')
# what is page1's end index? 4
print(f'what is page1\'s end index? {page1.end_index()}')

 

위의 코드는 이전과 다음 버튼을 구현 시 사용되는 함수들 입니다. has_next()는 다음 페이지가 존재하는지 확인하는 함수이고, has_previous()는 이전 페이지가 존재하는지 확인하는 함수입니다. next_page_number()는 다음 페이지의 번호를 반환해주는 함수이고, start_index()는 전체 데이터에서 몇 번째 index부터 해당 page에 저장되었는지 알려주는 함수이고, end_index()는 start_index()와 반대로 전체 데이터에서 몇 번째 index가 마지막으로 저장되었는지 알려주는 함수입니다. 따라서 page 1은 첫 번째 페이지로 시작 페이지입니다. 따라서 has_next()는 True, has_previous()는 False, next_page_number()는 2, start_index()는 item1부터 저장되었으므로 1, end_index()는 item4가 마지막으로 저장되었으므로 4가 됩니다.

 

# page2 has next page? False
print(f'page2 has next page? {page2.has_next()}')
# page2 has previous page? True
print(f'page2 has previous page? {page2.has_previous()}')
# previous page number is 1
print(f'previous page number is {page2.previous_page_number()}')
# what is page2's start index? 5
print(f'what is page2\'s start index? {page2.start_index()}')
# what is page2's end index? 8
print(f'what is page2\'s end index? {page2.end_index()}')

 

마지막으로 page 2입니다. page 2는 두 번째 페이지로 마지막 페이지입니다. 따라서 has_next()는 False, has_previous()는 True, previous_page_number()는 1, start_index()는 item5부터 저장되었으므로 5, end_index()는 item8부터 저장되었으므로 8이 됩니다.

728x90

'Python > Django' 카테고리의 다른 글

[Django] Javasrcipt에서 ORM 정보 사용하기  (0) 2021.06.29
[Django] honeypot은 뭐야?  (0) 2021.06.28
[Django] decouple은 뭐야?  (1) 2021.06.25
[Django] smtpauthenticationerror 해결  (0) 2021.06.23
[Django] 프로젝트 설정  (0) 2021.06.15