페이징 소스 공유합니다.

미해결질문
조현열 프로필

페이징 구현이 부족한듯하여 제가 만든 소스를 공유해봅니다.

#views.py

from django.shortcuts import render
from third.models import Restaurant
from django.core.paginator import Paginator
import math
from third.forms import RestaurantForm
from django.http import HttpResponseRedirect

# Create your views here.


def list(request):
    restaurants = Restaurant.objects.all()
    pagenator = Paginator(restaurants, 5)
    page = request.GET.get('page')
    if page is None:
        page = 1

    # 시작페이지 끝페이지 구하기
    page_F = float(page)
    if page_F <= 10:
        beginPage = 1
    else:
        beginPage = (math.trunc(page_F / 10)) * 10 + 1

    if (beginPage + 10) > pagenator.num_pages:
        lastPage = pagenator.num_pages
    else:
        lastPage = beginPage + 9
    nextRangeStartPage = lastPage + 1

    pageRange = []
    for num in range(beginPage, lastPage+1):
        pageRange.append(num)

    items = pagenator.get_page(page)
    context = {
        'restaurants': items,
        'lastPage': lastPage,
        'pageRange': pageRange,
        'nextRangeStartPage': nextRangeStartPage,
    }
    return render(request, 'third/list.html', context)

#list.html

{% extends 'third/base.html' %}
{% load static %}
{% block content %}
<div class="container">
    {% for item in restaurants %}
        <div class="row restaurant-item" style="margin:20px auto;">
            <div class="col-sm-12">
                <div class="card border-secondary">
                    <div class="card-body">
                        <h5 class="card-title">{{ item.name }}</h5>
                        <p class="card-subtitle mb-2 text-muted">{{ item.address }}</p>
                        <p class="card-text">음식점 설명</p>
                        <a href="#" class="card-link">자세히 보기</a>
                        <a href="#" class="card-link">수정하기</a>
                    </div>
                </div>
            </div>
        </div>
    {% endfor %}

    <div class="row">
        <div class="col-sm-12 text-center">
            <div class="pagination">
                <spen class="step-links text-center" style="width:100%;">

                    {% if restaurants.has_previous %}
                        <a href="?page=1">&laquo;</a>
                    {%  endif %}

                    {% for pageNum in pageRange %}
                        {% if restaurants.number == pageNum %}
                            <spen class="current">
                                {{ restaurants.number }}
                            </spen>
                        {% else %}
                           <a href="?page={{ pageNum }}">{{ pageNum }}</a>
                        {% endif %}
                    {% endfor %}

                    {% if restaurants.paginator.num_pages > lastPage %}
                        <a href="?page={{ nextRangeStartPage }}">&raquo;</a>
                    {% endif %}

                </spen>
            </div>
        </div>
    </div>
</div>
{% endblock %}

박순영 프로필
박순영 10달 전

아무래도 페이지네이션 파트는 짧게 진행하느라 조금 부족했던거 같네요.

공유해주셔서 정말 감사합니다.

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스