■ 사용 Class : Paginator

 

■ views.py

def index(reuqest):
	page = request.GET.get('page')	# GET 으로 받은 페이지 번호
    db_list = <ModelsClass>.objects.orderby('-<column>')	# 페이징 처리할 DB Data 조회
    paginator = Paginator(db_list, <int:per_page>)	# 한 페이지 당 조회된 <per_page> 만큼 DB Data 조회
    page_obj = paginator.get_page(page)	# GET 으로 받은 페이지 번호 기준으로 페이징
    context = {'page_list': page_obj}	# template 에 전달할 값
    return render(request, '<template>', context}

▶ paginator.get-page(<NUMBER>) : 유효 값이 아니면 페이징 최대값 반환

▶ paginator.page(<NUMBER>) : 유효 값이 아니면 "EmptyPage" 반환

 

■ HTML

<ul>
	<!-- 이전 페이지 -->
    {% if page_list.has_previous %}
    	<li>
        	<a href="?page={{ page_list.previous_page_number }}">이전</a>
        </li>
    {% else %}
    	<li>
        	<a href="#">이전</a>
        </li>
    {% endif %}
    <!-- 페이지 리스트 -->
    {% for page_number in page_list %}
    	{% if page_number == page_list.number %}
   	     <li>
        		<b>{{ page_number }}</b>
        	</li>
        {% else %}
        	<li>
        		<a href="?page={{ page_number }}">{{ page_number }}</a>
        	</li>
        {% endif %}
    {% endfor %}
    <!-- 다음 페이지 -->
    {% if page_list.has_next %}
    	<li>
        	<a href="?page={{ page_list.next_page_number }}">다음</a>
        </li>
    {% else %}
    	<li>
        	<a href="#">다음</a>
        </li>
    {% endif %}
</ul>

 

▶ "paginator.count" : 전체 게시물 개수

▶ "paginator.per_page" : 페이지당 보여줄 게시물 개수

▶ "paginator.page_range" : 페이지 범위

▶ "number" : 현재 페이지

▶ "previous_page_number" : 이전 페이지 번호

 - True : int

 - False : EmptyPage

▶ "next_page_number" : 다음 페이지 번호

 - True : int

 - False : EmptyPage

▶ "has_previous" : 이전 페이지 유무

 - True : True

 - False : False

▶ "has_next" : 다음 페이지 유무

 - True : True

 - False : False

▶ "start_index" : 현재 페이지의 시작 인덱스 (1부터 시작)

▶ "end_index" : 현재 페이지의 끝 인덱스 (1부터 시작)

'Django' 카테고리의 다른 글

Django / MySQL(Maria) DB 연동  (0) 2023.03.01

+ Recent posts