首页 > 编程 > Python > 正文

django实现分页的方法

2020-02-23 01:24:14
字体:
来源:转载
供稿:网友

本文实例讲述了django实现分页的方法。分享给大家供大家参考。具体如下:

Python代码如下:

#!/usr/bin/env python# -*- coding: utf-8 -*-# Create your views here.from django.shortcuts import render_to_responsefrom winlog.log_dj.models import Winlogfrom django.core.paginator import Paginator,InvalidPage,EmptyPage,PageNotAnIntegerdef index(request):  after_range_num = 5  before_range_num = 4  try:    page=int(request.GET.get('page','1'))    if page < 1:      page=1  except ValueError:    page=1  winlog_list = Winlog.objects.all().order_by('-id')  paginator = Paginator(winlog_list, 10)  try:    winloglist = paginator.page(page)  except (EmptyPage,InvalidPage,PageNotAnInteger):    winloglist = paginator.page(1)  if page >= after_range_num:    page_range = paginator.page_range[page-after_range_num:page+before_range_num]  else:    page_range = paginator.page_range[0:int(page)+before_range_num]  return render_to_response('log_dj/index.html', locals())

HTML页面如下:

{% for winlog in winloglist.object_list %}  {{ winlog.date }}|{{ winlog.time }} <br />{% endfor %}{% if winloglist.has_previous %}<a href="?page={{ winloglist.previous_page_number }}" title="下一页">上一页</a> {% endif %}{% for p in page_range %}{% ifequal p winloglist.number %}<span>{{p}}</span>{% else %}<a href="?page={{p}}" title="第{{p}}页">{{p}}</a>{% endifequal %}{% endfor %} {% if winloglist.has_next %}<a href="?page={{ winloglist.next_page_number }}" title="下一页">下一页</a> {% endif %}<!-- 第 {{ userList.number }} 页 共 {{ userList.paginator.num_pages }} 页-->

Paginator对象:

类Paginator:
class Paginator(object_list,per_page,orphans=0,allow_empty_first_page=True)

必须提供的参数:

object_list:一个列表或元组,元素是django QuerySet或是包含count()或__len__()方法的可切片对象。
per_page:包含在一页中最多的条目数量。

可选参数:

orphans:在最后一页中充许的最少条目数量,默认是0.当最后一页条目数量小于或等于orphans时,这些条目加到本页的上一页中。
allow_empty_first_page:是否充许第一页为空。如设为False且object_list为空,则抛出EmptyPage异常。

方法:

Paginator.page(number):返回一个Page对象,序号是始于1.如给出的页号不存在,抛出InvalidPage异常。

属性:

Paginator.num_pages:页面总页数
Paginator.page_range:页面数的范围,始于1,如[1,2,3,4]。

InvalidPage异常:

如要求的页面无效或页面中没有对象,page()抛出InvalidPage异常。
PageNotAnInterger:当提供给page()的数不是整数是抛出该异常。
EmptyPage:当提供给page()的数是一个有效数,但在该页没有对象存在时,抛出该异常。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表