장고 - Pagination 구현 방법
게시판(board) 프로젝트를 예로 들어보자.
1. 뷰에서 페이지 설정
- 경로 : board_project > board > views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21# all 전체를 가져온다.
def document_list(request):
documents = Document.objects.all()
page = int(request.GET.get('page', 1))
# page가 없다면, default값 1로 설정
# --> 127.0.0.1:8000/ 검색 시, 127.0.0.1:8000/?page=1 로 url 변환
paginated_by = 3
# paginated_by : 페이지당 갯수
# Documents 객체 전체 갯수
total_count = len(documents)
# 전체 페이지 계산
total_page = math.ceil(total_count/paginated_by)
# 페이지 1부터 끝까지 범위 설정
page_range = range(1, total_page+1)
# 첫 페이지 인덱스와 마지막 페이지 인덱스 설정
start_index = paginated_by * (page-1)
end_index = paginated_by * page
documents = documents[start_index:end_index]
return render(request, 'board/document_list.html', {'object_list':documents, 'total_page':total_page, 'page_range':page_range})
2. 템플릿에서 페이지 디자인 설정
- 경로 : board_project > board > templates > board > document_list.html
1
2
3
4
5
6
7<nav aria-label="Page navigation example">
<ul class="pagination">
{% for page in page_range %}
<li class="page-item"><a class="page-link" href="{% url 'board:list' %}?page={{page}} ">{{page}}</a></li>
{% endfor %}
</ul>
</nav>
Posted
tags:
{ Django }
{ pagination }