python

[Django] 페이징 Paging

코딩하는 공부방 2022. 1. 11. 15:35

Pagination을 구현할 수 있는 방법에 대해서 알아보겠습니다.

 

 

 

먼저 장고에서 페이징을 위해 사용하는 클래스는 Paginator이다. Paginator 클래스를 사용하여 다음과 같은 방법으로 나타내겠습니다.

 

 

view에서 index 함수는 제일 첫 페이지에서 리스트를 보이는 것을 관리하는 부분입니다.

 

 

index 함수를 살펴보자

 

page = request.GET.get('page', '1)은 https://localhost:8000/bo/?page=1 처럼 GET 방식으로 호출된 URL에서 page 값을 가져올 때 사용한다. 만약 https://localhost:8000/bo/처럼 page 값 없이 호출된 경우에는 디폴트 1이라는 값을 설정한다.

그리고 Paginator 클래스를 다음처럼 사용했다.

 

 

 paginator = Paginator(board_list, 10)

 

첫번째 파라미터 board_list는 게시물 전체를 의미하는 데이터이고 두 번째 파라미터 10은 페이지당 보여줄 게시물의 개수이다.

 

page_obj = paginator.get_page(page)

 

그리고 paginator를 이용하여 요청된 페이지(page)에 해당되는 페이징 객체(page_obj)를 생성했다. 이렇게 하면 장고 내부적으로 데이터 전체를 조회하지 않고 해당 페이지의 데이터만 조회하도록 쿼리가 변경된다.

 

페이징 객체 page_obj에는 다음과 같은 속성들이 있다.

항목 설명
paginator.count 전체 게시물 개수
paginator.per_page 페이지당 보여줄 게시물 개수
paginator.page_range 페이지 범위
number 현재 페이지 번호
previous_page_number 이전 페이지 번호
next_page_number 다음 페이지 번호
has_previous 이전 페이지 유무
has_next 다음 페이지 유무
start_index 현재 페이지 시작 인덱스(1부터 시작)
end_index 현재 페이지의 끝 인덱스(1부터 시작)

이 속성들은 템플릿에서 페이징 처리할 때 사용한다

 

 

CBV에서는

 

 

paginate_by를 넣어서 몇개씩 끊어서 보여줄지 결정을 하고 Template 부분에서 page_obj를 사용을 하여서 페이징을 합니다.

 


참고

https://docs.djangoproject.com/en/4.0/topics/pagination/
https://wikidocs.net/71240
https://pilyeooong.tistory.com/entry/Django-Pagination-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%84%A4%EC%9D%B4%EC%85%98

'python' 카테고리의 다른 글

Queue 큐  (0) 2022.02.07
[Django] Rest API  (0) 2022.01.26
[Django]클래스형 뷰  (0) 2022.01.03
[Django] Admin 꾸미기  (0) 2021.12.28
[Django] MTV 패턴  (0) 2021.12.28