Pagination
한 페이지에 보이는 게시물의 수를 설정하고, 다음 페이지로의 연결을 설정하고 싶을 때 유용하게 사용할 수 있다.

Pagination 을 설정하지 않은 상태이다. 게시물은 11개가 생성되어있고, Pagination을 설정하기 전이다.
def border(request):
borders = Border.objects.all()
paginator = Paginator(borders, 10) # 게시물 10개 제한
page = request.GET.get('page') # ?page=1
borders = paginator.get_page(page)
return render(request, 'border/border.html', {'border':borders})
우리가 보고 있던 페이지에 Paginator을 설정해주었다, Paginator는 한 페이지에 보일 게시물을 제한한다.
request.GET.get('page') # 127.0.0.1:8000/border/?page=1 과 같은 GET 방식으로 url 을 받을 수 있다.
위와 같이 설정해주고 웹 사이트를 새로고침해보자.

게시물이 10개만 출력되는 것을 확인할 수 있다.
여기서 의문이 든다. 11번 째 게시물은 어디로 갔을까? 한번 확인해보도록 하자.
위에 설명했다 싶이 GET 방식으로 url 을 불러온다?
http://127.0.0.1:8000/border/?page=2 로 입력해주면 11번 게시물이 보이는 걸 확인할 수 있다.

마지막으로 자주 쓰이는 객체들을 테스트해보면서 이해하고 마무리해보자.
border.html 에서 아래와 같은 코드를 테스트해보았다.
설명은 주석으로 대신한다.
<div class="pagination">
{{ border.number }} <!-- 현재 페이지(1) number -->
{{ border.paginator.count }} <!-- 모든 게시물 수(11) 10개로 제한했기 때문에 11번 째 게시물은 2페이지로 -->
{{ border.paginator.num_pages }} <!-- 모든 페이지 수(2) -->
{{ border.paginator.page_range }} <!-- range(1,3) = 1~2 -->
{{ border.has_previous }} <!-- False 페이지1의 전 페이지는 없기 때문에-->
{{ border.has_next }} <!-- True 페이지1의 다음 페이지가 있기 때문에-->
</div>
[!] 해당 글을 작성하면서 이상한 점을 발견했다. id 의 값이 page2로 갔더니 다시 1부터 시작하고 있었다.
해결방법은 아래와 같다. forloop.counter
{{forloop.counter0|add:border.start_index }}
페이지의 수를 출력하고, 현재 있는 페이지를 strong 표시하라.
{% for num in border.paginator.page_range %}
{% if border.number == num %} <!-- 현재 있는 페이지가 num과 같다면-->
<strong>{{ num }}</strong> <!-- 조건에 맞는 페이지 번호가 굵게 표시 -->
{% else %}
{{ num }} <!-- 나머지 페이지들은 그냥 출력-->
{% endif %}
{% endfor %}

참조 url
https://www.youtube.com/watch?v=Z8MDdDyB_6A
http://www.sci-blog.com/2010/03/using-forloop-counter-in-django-pagination.html
Using forloop counter in django pagination
In order to use forloop.counter with pagination use: {% for object in object_list %} {{ page_obj.start_index|add:forloop.counter0 }} {% endfor %}
www.sci-blog.com
'Web > Django' 카테고리의 다른 글
| Django - static 파일지정 (0) | 2019.08.05 |
|---|---|
| Django - Pagination (클래스형 뷰) (0) | 2019.08.05 |
| Django - Dstagram part5-배포하기 헤로쿠(Heroku) (0) | 2019.07.23 |
| Django - Dstagram part4-아마존 S3 연동하기(이미지 서버) (0) | 2019.07.23 |
| Django - Dstagram part3-댓글 기능 구현하기 (0) | 2019.07.23 |
댓글