Python/Django(v2.1) - 2020년 작성

Django Paginator

gudaeng 2025. 3. 2. 22:37

Paginator 사용하기


게시판 같은 곳에서 리스트의 양이 많아 질 경우 나누어 보여주기 위해서 사용

여기 적힌 예에서 model은 Review 이고 forms는 ReviewForm이다.

bootstrap을 사용했음.

1. views.py에 내용 추가하기

from django.core.paginator import Paginator

def review_list(request):
    reviews = Review.objects.order_by('-pk')
    paginator = Paginator(reviews, 5) #한 페이지 당 몇개 씩 보여줄 지 지정
    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)
    reviews_all = get_list_or_404(Review) #전체 개수를 보기 위해
    total_count = len(reviews_all)    # 리뷰의 총 개수 
    total_page = total_count//5        # 리뷰 총 개수 / 한 페이지에 보여줄 수
    page_range = range(1,total_page+1)
    context = {
        'reviews': reviews,
        'page_obj': page_obj,
        'page_range': page_range,
    }
    return render(request, '앱이름/review_list.html', context)

2. 리스트를 보여줄 html파일 수정

{% for review in page_obj %}
            <div class="card mb-3 border-info" onclick="location.href='/community/{{ review.pk }}/'" style="cursor:pointer">
                <div class="card-header">
                    {{ review.movie_title }}
                </div>
                <div class="card-body">
                    <h5 class="card-title">{{ review.title }}</h5>
                    <p class="card-text">{{ review.content }} </p>
                    <a href="{% url 'reviews:detail' review.pk %}" class="btn btn-info float-right">Go Detail</a>
                    <p class="card-text">{{ review.created_at|date:"y.m.d P" }}</h3>
                </div>
            </div>
        {% endfor %}

    <!-- Paginator !-->
<nav aria-label="Page navigation">
        <ul class="pagination">
        {% if page_obj.has_previous %}
            <li class="page-item"><a class="page-link" href="?page={{ page_obj.previous_page_number }}">Previous</a></li>
        {% else %}
            <li class="page-item"><a class="page-link" href="#">Previous</a></li>
        {% endif %}
        {% for page in page_range %}
            {% if page_obj.number == page %}
                    <li class="page-item active"><a class="page-link" href="?page={{ page }}">{{ page }}<span class="sr-only">(current)</span></a></li>
                {% else %}
                    <li class="page-item"><a class="page-link" href="?page={{ page }}">{{ page }}</a></li>
                {% endif %}
        {% endfor %}
        {% if page_obj.has_next %}
            <li class="page-item"><a class="page-link" href="?page={{ page_obj.next_page_number }}">Next</a></li>
        {% else %}
            <li class="page-item"><a class="page-link" href="#">Next</a></li>
        {% endif %}
        </ul>
</nav>
  • 현재 페이지에 따라 표시를 다르게 하기 위하여 {% if page_obj.number == page %}을 사용함

'Python > Django(v2.1) - 2020년 작성' 카테고리의 다른 글

Django Comment  (0) 2025.03.02
Django User (2)  (0) 2025.03.02
Django User (1)  (0) 2025.03.02
Django CRUD  (0) 2025.03.02
Django 시작하기  (0) 2025.03.02