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 %}