views.py
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from .models import ArticlePost
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
@login_required(login_url='/account/login/')
def article_list(request):
articles_list = ArticlePost.objects.filter(author=request.user)
paginator = Paginator(articles_list,4) # 创建分页实例对象,规定每页最多2个
page = request.GET.get('page') # 获得当前浏览器GET请求的参数page的值,也就是当前浏览器所请求的页码数值,该参数必须是大于或等于1的整数
try:
current_page = paginator.page(page) # 得到指定页面内容,page()是Paginator对象的一个方法
articles = current_page.object_list # 得到该页所有的对象列表,object_list是Page对象的属性
except PageNotAnInteger: # 异常:请求的页码数值不是整数
current_page = paginator.page(1)
articles = current_page.object_list
except EmptyPage: # 异常:请求的页码数值为空或者URL参数中没有page
current_page = paginator.page(paginator.num_pages) # paginator.num_pages返回的是页数,num_pages是Paginator对象的一个属性
articles = current_page.object_list
return render(request,'article/column/article_list.html', {'articles': articles, 'page': current_page})
如果请求的页数不是整数,返回第一页。
如果请求的页数不在合法的页数范围内,返回结果的最后一页。
paginator.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>
number:返回当前页的页码
article_list.html
在适当位置插入paginator.html
{% include "paginator.html" %}
网友评论