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 |