전 게시물은 함수형 뷰로 구현했다면 이번에는 클래스형 뷰로 구현해보겠습니다.
views.py
class borderListView(ListView):
model = Border # models.py 의 Border 테이블을 model 로 설정해줍니다.
template_name = 'border/border.html' # 데이터를 전달할(?) 템플릿을 지정
context_object_name = 'border' # 템플릿에 넘어갈 정보? context 지정
paginate_by = 10 # 화면에 표시할 게시물은 10개로 제한
def get_context_data(self, **kwargs):
context = super(borderListView, self).get_context_data(**kwargs)
paginator = context['paginator']
page_numbers_range = 5 # Display only 5 page numbers
max_index = len(paginator.page_range)
page = self.request.GET.get('page')
current_page = int(page) if page else 1
start_index = int((current_page - 1) / page_numbers_range) * page_numbers_range
end_index = start_index + page_numbers_range
if end_index >= max_index:
end_index = max_index
page_range = paginator.page_range[start_index:end_index]
context['page_range'] = page_range
return context
border.html
{% if is_paginated %}
<nav aria-label="Page navigation example">
<ul class="pagination">
{% if page_obj.has_previous %}
<li>
<a class="page-link" href="?page={{ page_obj.previous_page_number }}">
<span>Prev</span>
</a>
</li>
{% else %}
<li class="page-item">
<a href="#" class="page-link">
<span>Previous</span>
</a>
</li>
{% endif %}
{% for page in page_range %}
<li class="page-item" {% if page == page_obj.number %}class="active"{% endif %}>
<a class="page-link" href="?page={{ page }}">{{ page }}</a>
</li>
{% endfor %}
{% if page_obj.has_next %}
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.next_page_number }}">
<span>Next</span>
</a>
</li>
{% else %}
<li class="page-item" {% if not page_obj.has_next %}class="disabled"{% endif %}>
<a class="page-link" href="#">
<span>Next</span>
</a>
</li>
{% endif %}
</ul>
</nav>
{% endif %}
paginator 관련 함수는 이전 게시물에 작성되어 있습니다.
참고 url : https://jupiny.com/2016/11/22/limit-pagination-page-numbers-range/
pagination 페이지 숫자 범위 제한하기
Django에서는 pagination를 위한 다양한 기능들을이 기본적으로 구현돼있다. 그래서 간단한 설정만으로도 pagination을 쉽게 구현할 수 있다. 그리고 이 설정에 대한 부분은 문서에 자세히 정리되어 있다. 나는 이 pagination 기능을 이용하여 한 페이지당 10개의 객체들을 보여주는 Class-based view를 아래와 같이 구현하였다. # students/views/list.py from django.views.generic impo
jupiny.com
'Web > Django' 카테고리의 다른 글
| Django - 검색기능 구현 (2) | 2019.08.07 |
|---|---|
| Django - static 파일지정 (0) | 2019.08.05 |
| Django - Pagination (0) | 2019.08.02 |
| Django - Dstagram part5-배포하기 헤로쿠(Heroku) (0) | 2019.07.23 |
| Django - Dstagram part4-아마존 S3 연동하기(이미지 서버) (0) | 2019.07.23 |
댓글