分页操作
进行分页操作需要先导入分页模块,顺便导入了一些异常的函数,方便处理
from django.core.paginator importPaginator,PageNotAnInteger,InvalidPage,EmptyPage
paginator =Paginator(item_list,2)这是分页函数的使用
def index(request):
try:
item_list =Item.objects.all().order_by('-date')
paginator =Paginator(item_list,2)
try:
page = int(request.GET.get('page',1))
item_list = paginator.page(page) 通过paginator.page来取出page第几页的内容
except(PageNotAnInteger,InvalidPage,EmptyPage):
item_list = paginator.page(1)如果有错误就返回第一页的内容
exceptExceptionas e:
print e
return render(request,'index.html',locals())
对不同的操作捕获不同的异常,先进行了排序,再进行了分页
分页操作还是有挺多的操作的
<divclass="page">
{% if item_list.has_previous %}
<ahref="?page={{ item_list.previous_page_number }}">上一页</a>
{% endif %}
第{{ item_list.number }}页/总共{{ item_list.paginator.num_pages }}页
{% if item_list.has_next %}
<ahref="?page={{ item_list.next_page_number }}">下一页
{% endif %}
</div>
当前页面对象添加了paginator后有
item_list.has_previous item_list.has_next item_list.next_page_number item_list.numbe这几个属性,或者方法
paginator有item_list.paginator.num_pages
在views.py里面封装分页代码:
因为函数index和函数archive都有分页代码,所以可以把分页代码分装成一个函数来引用
def getPage(request,article_list):
paginator = Paginator(article_list,2)
try:
page = int(request.GET.get('page',1))
article_list = paginator.page(page)
except (EmptyPage,InvalidPage,PageNotAnInteger):
article_list = paginator.page(1)
return article_list
因为始终是对取出来的内容进行的修改所以就直接返回article_list,在article_list当中,还需要用到request,
所以这里需要传入requestarchive.html和index.html都有上一页,下一页
,所以可以Include提取出来
新建一个pagination.html把分页的代码直接复制进去,在到相应的位置,以{% include '
pagination.html' %}代替
然后发现archive的页面在按下一页后,参数没有传递过去,所以需要一个判断拼接字符串