Python/Django

[Django-Memo] 7. 페이징 처리 (Paginator)

꼰대 2021. 6. 1. 19:49

페이징 처리를 위해 django에서 제공하는 페이징 패키지를 이용하겠습니다.

그리고 보여지는 형태는 한페이지에 게시물 10개, 하단 페이징 부분 표시 수는 5개씩 보여지도록 하겠습니다.

또한 6페이지를 호출하면 페이징 번호는 6부터 10까지 보이게 합니다.

 

memo/views.py를 열어 패키지를 추가합니다.

그리고 게시물 10개, 페이징 표시 5개를 변수로 정의합니다.

memo/views.py

 

 

page번호를 get 파라미터로 받고 없으면 기본값으로 1을 설정합니다.

다음 메모 리스트를 조회하고 조회된 리스트와 한 페이지에 보여질 메모 수를 인자로 넣어 Paginator 객체를 생성합니다.

생성된 객체에 page 파라미터 변수를 이용해 해당 페이지 리스트를 memo_list.html에 반환합니다.

memo/views.py

 

참고로 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부터 시작)

 

 

이제 페이징을 위해 필요한 정보를 구합니다.

먼저 전체 메모 리스트의 페이징 사이즈를 구합니다. 이는 맨 마지막 페이지 링크에 넣을 값입니다.

memo/views.py

 

 

다음으로 파라미터로 받은 페이지가 몇번째 블럭인지 (1~5, 6~10 등)구합니다.

그리고 페이지 시작번호와 마지막 번호를 구합니다.

memo/views.py

 

 

위에서 구한값을 기존의 context 변수에 넣어 memo_list.html로 보냅니다.

memo/views.py

 

 

페이징 디자인은 부트스트랩에 있는 것을 이용합니다.

먼저 맨 왼쪽 화살표 (한 단계 이전, 맨 처음으로 이전) 처리입니다.

has_previous를 이용하여 이전 페이지가 없으면 버튼이 안 눌리도록 disabled 처리 합니다.

 

 

다음은 5개까지 보이는 페이지 링크 처리입니다.

전체 페이지 번호 중 인자로 받은 페이지 시작번호와 페이지 끝 번호 사이에 있다면 링크를 보여주며 현재 페이지와 동일하면 활성화 표시인 active를 추가합니다.

 

 

이제 맨 오른쪽 화살표 (한 단계 이후, 맨 끝으로 이전) 처리입니다.

has_next를 이용하여 이후 페이지가 없으면 버튼이 안 눌리도록 disabled 처리 합니다.

 

 

모두 끝났습니다.

완료되면 다음과 같습니다.

 

반응형