Djangoでページネーションを表示する手順を説明します。
Djangoアプリケーション内のviews.pyを編集します。
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def post_list(request):
'''
記事の一覧を表示します。
'''
# QuerySetsですべてのポストを取得する
object_list = Post.published.all()
paginator = Paginator(object_list, 3) # 3 posts in each page
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', {'page': page,'posts': posts})
template直下にpagination.htmlを作成します。
<div class="pagination">
<span class="step-links">
{% if page.has_previous %}
<a href="?page={{ page.previous_page_number }}">前へ</a>
{% endif %}
<span class="current">
Page {{ page.number }} of {{ page.paginator.num_pages }}
</span>
{% if page.has_next %}
<a href="?page={{ page.next_page_number }}">次へ</a>
{% endif %}
</span>
</div>
上のpagination.htmlを一覧ページに取り込みます。
{% include "pagination.html" with page=posts %}
の部分です。
{% block title %}My Blog{% endblock %}
{% block content %}
<h1>My Blog</h1>
{% for post in posts %}
<h2>
<a href="{{ post.get_absolute_url }}">
{{ post.title }}
</a>
</h2>
<p class="date">
Published {{ post.publish }} by {{ post.author }}
</p>
{{ post.body|truncatewords:30|linebreaks }}
{% endfor %}
{% include "pagination.html" with page=posts %}
{% endblock %}
これでページネーションを表示できます。