Paginator 구현하기 - Tirrilee/TechTalk GitHub Wiki
CBV에서 공통적으로 지원하는 옵션
- 템플릿을 사용하는 CBV
- template_name : Default로 설정된 템플릿 경로를 변경하고자 할 경우
- 리스트 형
- allow_empty(Default False) : 조회할 테이터가 없을 경우, 404 에러 처리
- paginate_by(Default None) : 페이지당 갯수 지정
- 지정시 페이징 처리(페이지 인자 예 : ?page=1)
- 페이징 관련 클래스 : django.core.paginator.Page, django.core.paginator.Paginator
Paginator 구현
views.py
from django.views.generic import ListView
class PostListView(ListView):
model = Post
paginate_by = 3
post_list = PostListView.as_view()
paginate_by 옵션설정시 설정한 갯수 만큼 template에 뿌려주며, url 뒤에 ?page=[num] 이런식으로 페이지 넘버를 설정해서 페이징 처리를 구현 할 수 있다.
template/post_list.html
{% if is_paginated %}
{% if page_obj.has_pervious %}
<a href="?page={{ page_obj.previous_page_number }}">이전</a>
{% endif %}
{{ page_obj.number }}페이지
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">다음</a>
{% endif %}
{% endif %}