[Python Django] 3-6. CBV ListView - Pagination 응용 get_elided_page_range()
2022. 3. 26. 09:47ㆍPython/Django Framework
반응형
기본 pagination을 사용하면 전체 페이지, 현재 페이지, 이전 페이지, 다음 페이지로 이루어진 UI만 제작이 가능하나, get_elided_page_range를 이용하면 현재 페이지를 중심으로 앞 뒤 페이지의 넘버링을 보여주는 UI제작이 가능하다
get_elided_page_range(page_num, on_each_side={int}, on_ends={int})
page_num
- 현재 페이지
on_each_side
- 현재 페이지 양 옆으로 나올 다른 페이지의 개수
- 총 100페이지이고 현재 10페이지, on_each_side값이 3이라면 7,8,9,[10],11,12,13 출력
- 총 100페이지이고 현재 1페이지 , on_each_side값이 3이라면 [1], 2, 3, 4 출력
on_ends
- 페이지 양 옆으로 맨 처음, 맨 끝 페이지의 출력 개수
- 총 100페이지이고 현재 10페이지, on_each_side값이 3, on_ends값이 2이라면 1,2,...,7,8,9,[10],11,12,13,...,99,100 출력
views.py 수정
# board/views.py
class BoardListView(ListView):
model = Board
template_name = "board_list.html"
context_object_name = "board_list"
ordering = "-id"
paginate_by = 5
paginate_orphans = 1
page_kwarg = "p"
# get_context_data를 오버라이드 하여 page_list를 생성해준다
def get_context_data(self, *, object_list=None, **kwargs):
context = super(BoardListView, self).get_context_data()
page = context['page_obj']
paginator = page.paginator
page_list = paginator.get_elided_page_range(page.number, on_each_side=3, on_ends=2)
context['page_list'] = page_list
return context
board_list.html
# pagination 수정
<div>
<nav>
<ul class="pagination justify-content-center">
{% if page_obj.has_previous %}
<li class="page-item">
<a class="page-link" href="?p={{ page_obj.previous_page_number }}">«</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" href="javascript:return false">«</a>
</li>
{% endif %}
{% for page_no in page_list %}
{% ifequal page_no page_obj.number %}
<li class="page-item active">
<a class="page-link" href="javascript:return false">
{{ page_no }}
</a>
</li>
{% else %}
<li class="page-item">
<a class="page-link" href="?p={{ page_no }}">
{{ page_no }}
</a>
</li>
{% endifequal %}
{{ page }}
{% endfor %}
{% if page_obj.has_next %}
<li class="page-item">
<a class="page-link" href="?p={{ page_obj.next_page_number }}">»</a>
</li>
{% else %}
<li class="page-item disabled">
<a class="page-link" href="javascript:return false">»</a>
</li>
{% endif %}
</ul>
</nav>
</div>
반응형
'Python > Django Framework' 카테고리의 다른 글
[Python Django] 3-8. CBV DeleteView를 이용한 게시판 글 삭제 기능 구현 (0) | 2022.03.26 |
---|---|
[Python Django] 3-7. CBV UpdateView를 이용한 글 수정 기능구현 (0) | 2022.03.26 |
[Python Django] 3-5. CBV ListView에 Pagination 적용 (0) | 2022.03.26 |
[Python Django] 3-4. CBV ListView를 이용한 List 구현 (0) | 2022.03.26 |
[Python Django] 3-3. CBV FromView ForeignKey 연결 (0) | 2022.03.26 |