[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 버전을 사용하고 있지만 최신 버전 기준 자료를 첨부합니다.

Leave A Comment

Avada Programmer

Hello! We are a group of skilled developers and programmers.

Hello! We are a group of skilled developers and programmers.

We have experience in working with different platforms, systems, and devices to create products that are compatible and accessible.