编辑blog下的views.py文件,为了导入分页器类并且调整post_list视图
def post_list(request):
# posts = Post.published.all()
# return render(request, 'blog/post/list.html', {'posts': posts})
object_list = Post.published.all()
paginator = Paginator(object_list, 3)
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})
工作方式:
(1)利用每个页面上显示的对象数量实例化Paginator类
(2)获取表示当前页面号的page get参数
(3)调用Paginator的page方法获取所需页面对象
(4)如果得到的参数不是一个整数,则检索第一个页面;
得到的参数大于最后一个页面数,则检索到最后一个页面
(5)向模板传递页面号以及检索对象
分页模板pagination.html
<div class="pagination">
<span class="step-links">
{% if page.has_previous %}
<a href="? page={{ page.previous_page_number }}">Previous</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 }}">Next</a>
{% endif %}
</span>
</div>
分页模板接收到一个page对象,一渲染上一个和下一个链接,并显示当前页和总页数
另外还需在list.html中添加
{% include "pagination.html" with page=posts %}