[REAL Python – Django] – “Django – Pagination 구현”
[REAL Python – Django] – “Django – Pagination 구현”
4월 6, 2022
ListView에 있는 기능 사용하기
class PostList(ListView):
model = Post # model을 정해 줌.
ordering = '-pk'
paginate_by = 3
장고의 ListView
를 상속받았다면 paginate_by = 3
이라는 코드를 넣어줌으로서 페이지네이션을 구현할 수 있습니다.
템플릿에서 페이지네이션 객체 사용하기
{% if is_paginated %} {# 만약 포스트 갯수가 페이지네이션 할 포스트 갯수보다 많다면 페이지네이션이 작동 #}
<ul class="pagination justify-content-center mb-4">
{% if page_obj.has_previous %} {# 이전 페이지가 존재한다면, 다음 페이지로 가는 링크를 생성 #}
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.previous_page_number }}">Newer</a>
</li>
{% else %} {# 이전 페이지가 존재하지 않는다면, 버튼을 비활성화함 #}
<li class="page-item disabled">
<a class="page-link" href="#">Newer</a>
</li>
{% endif %}
{% if page_obj.has_next %} {# 다음 페이지가 존재한다면, 다음 페이지로 가는 링크를 생성 #}
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.next_page_number }}">Older</a>
</li>
{% else %} {# 다음 페이지가 존재하지 않는다면, 버튼을 비활성화함 #}
<li class="page-item disabled">
<a class="page-link" href="#">Older</a>
</li>
{% endif %}
</ul>
{% endif %}
장고는 정말 모든 게 만들어진 프레임워크가 아닌가 하는 생각이 들었습니다. 코드를 얼핏 봐도 매우 직관적이라서 이해하기 쉽습니다.
중요한 것은 다른 페이지로 이동하는 링크를 만들 때에 href="?page={{ page_obj.next_page_number }}"
처럼 ?page=
로 인수를 주어야 한다는 것입니다. 이것 때문에 조금 헤맸네요..
https://docs.djangoproject.com/en/4.0/topics/pagination/ 에 페이지네이션에 관한 설명이 나와 있습니다. 필자는 마크다운 라이브러리 때문에 장고 3.2 버전을 사용하고 있지만 최신 버전 기준 자료를 첨부합니다.