■ 사용 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 |
---|