Python/Django

[Python] Django의 Paginator로 쉽게 페이징 해주자

insub4067 2021. 12. 10. 21:50
# views.py

from django.shortcuts import render
from django.core.paginator import Paginator
from rooms import models as room_models

def all_rooms(requests):

    # page라는 query받고, query가 없을 경우 1
    page = requests.GET.get("page", 1)

    """Paginator 써서 구현"""
    # 사용할 contents
    room_list = room_models.Room.objects.all()
    # paginator 설정 (contents_list, 10 == 페이지당 content 갯수)
    paginator = Paginator(room_list, 10)
    # n페이지(10개)에 해당하는 contents 가지고 오기
    rooms = paginator.get_page(page)
    
    return render(
        requests,
        "rooms/home.html",
        {
            "rooms": rooms,
        },
    )
# home.html

{% extends 'base.html' %}

{% block page_name%}
Home
{% endblock %}

{% block content %}

{% for room in rooms.object_list %}
<h1>{{room.name}} / ${{room.price}}</h1>
{% endfor %}

<h5>
	
    # has_previous = Boolean
    {% if rooms.has_previous %}
    <a href="/?page={{rooms.previous_page_number}}">Previous</a>
    {% endif %}

    Page {{rooms.number}} of {{rooms.paginator.num_pages}}

    # has_next = Boolean
    {% if rooms.has_next %}
    <a href="/?page={{rooms.next_page_number}}">Next</a>
    {% endif %}

    # page_range = range(1, 17)
    {% for page in rooms.paginator.page_range %}
    {{page}}
    {% endfor %}

</h5>



{% endblock %}