https://docs.djangoproject.com/en/3.0/topics/pagination/
1. html파일 생성
[pagination.html]
<nav aria-label="Page navigation example" >
<ul class="pagination">
<li class="page-item">
{% if page.has_previous %}
<a class="page-link" href="?page={{page.previous_page_number}}">Previous</a>
{% endif %}
</li>
<li class="page-item">
<a class="page-link">Page {{page.number}} of {{page.paginator.num_pages}}</a>
</li>
<li class="page-item">
{% if page.has_next %}
<a class="page-link" href="?page={{page.next_page_number}}">Next</a>
{% endif %}
</li>
</ul>
</nav>
2. Python Console 창 명령어 입력을 통해 먼저 연습해본다.
from django.core.paginator import Paginator
objects = ['aa','bb','cc','dd','ee']
objects
#['aa', 'bb', 'cc', 'dd', 'ee']
paginator = Paginator(objects,2)
paginator.count
#5
paginator.num_pages
#3
paginator.page_range
#range(1, 4)
page1 = paginator.page(1)
page1
#<Page 1 of 3>
page1.object_list
#['aa', 'bb']
page2 = paginator.page(2)
page2.object_list
#['cc', 'dd']
page2
#<Page 2 of 3>
page3 = paginator.page(3)
page3.object_list
#['ee']
page1.has_next()
#True
page2.has_previous()
#True
page2.next_page_number()
#3
page3.start_index()
#5
page3.end_index()
#5
3. Views.py 수정
- import추가
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
- def post_list 수정
def post_list(request):
# posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
# return render(request, 'blog/post_list.html', {'posts': posts})
post_list = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
paginator = Paginator(post_list, 2)
page = request.GET.get('page')
try:
posts = paginator.page(page)
except PageNotAnInteger:
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages)
return render(request, 'blog/post_list.html', {'posts': posts})
4. post_list.html 수정
- {% include 'blog/pagination.html' with page=posts %} 추가
{% extends 'blog/base.html' %}
{% block content%}
{% for post in posts %}
<div class="post">
<div class="date">
<p>published : {{post.published_date}}</p>
</div>
<h1><a href="{% url 'post_detail_test' pk=post.pk %}">{{post.title}}</a></h1>
<a href="{% url 'post_detail_test' pk=post.pk %}">Comments: {{post.approved_comments.count}}</a>
</div>
{% empty %}
<div>요청하신 Post가 존재하지 않습니다. </div>
{% endfor %}
{% include 'blog/pagination.html' with page=posts %}
{% endblock %}
5. 결과 화면
'Python > Django' 카테고리의 다른 글
[vscode django세팅] vscode에서 django 사용하기 (0) | 2020.11.01 |
---|---|
django 와 mongodb연동 (0) | 2020.08.17 |
Django 댓글기능 추가 (0) | 2020.08.07 |
Django 템플릿 상속 / 게시판 만들기 (0) | 2020.08.06 |
Django (Migrate / URLConf / View / Template / QuerySet / Bootstrap) (0) | 2020.08.05 |