django实现分页的方法


Posted in Python onMay 26, 2015

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

Python代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Create your views here.
from django.shortcuts import render_to_response
from winlog.log_dj.models import Winlog
from django.core.paginator import Paginator,InvalidPage,EmptyPage,PageNotAnInteger
def 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>&
nbsp;
{% 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()的数是一个有效数,但在该页没有对象存在时,抛出该异常。

Page对象:

class Page(object_list,number,paginator):
一般不手工创建Pages,可以使用Paginator.page().

方法:

Page.has_next():如有下一页则返回True
Page.has_previous():如有上一页则返回True
Page.has_other_pages():如有上一页或下一页返回True
Page.next_page_number():返回下一页的页码。不管下一页是否存在都返回。
Page.previous_page_number():返回上一页的页码。不管上一页是否存在都返回。
Page.start_index():返回当前页面中第一个对象的序号,序号始于1.例如:将一个包含5个对象的列表分成每页2个对象,则第二页的start_index()返回3.
Page.end_index():返回当前页面中最一个对象的序号。

属性:

Page.object_list:当前页面中所有的对象
Page.number:当前页面的页码,始于1
Page.paginator:页面相关的Pageinator对象。

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
使用go和python递归删除.ds store文件的方法
Jan 22 Python
使用wxPython获取系统剪贴板中的数据的教程
May 06 Python
python实现发送和获取手机短信验证码
Jan 15 Python
Python语言实现获取主机名根据端口杀死进程
Mar 31 Python
Python使用pandas处理CSV文件的实例讲解
Jun 22 Python
Python求两点之间的直线距离(2种实现方法)
Jul 07 Python
seek引发的python文件读写的问题及解决
Jul 26 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
python 装饰器重要在哪
Feb 14 Python
使用Pytorch训练two-head网络的操作
May 28 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 Python
Qt自定义Plot实现曲线绘制的详细过程
Nov 02 Python
Django imgareaselect手动剪切头像实现方法
May 26 #Python
Django实现图片文字同时提交的方法
May 26 #Python
Python实现的简单算术游戏实例
May 26 #Python
Django中使用group_by的方法
May 26 #Python
python3序列化与反序列化用法实例
May 26 #Python
python实现用于测试网站访问速率的方法
May 26 #Python
Python函数可变参数定义及其参数传递方式实例详解
May 25 #Python
You might like
自己写了一个php检测文件编码的函数
2014/04/21 PHP
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
javascript getElementsByTagName
2011/01/31 Javascript
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
vue实现文字横向无缝走马灯组件效果的实例代码
2019/04/09 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
python函数参数*args**kwargs用法实例
2013/12/04 Python
Python操作列表的常用方法分享
2014/02/13 Python
python socket 超时设置 errno 10054
2014/07/01 Python
对python 命令的-u参数详解
2018/12/03 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
python-docx文件定位读取过程(尝试替换)
2020/02/13 Python
python使用Geany编辑器配置方法
2020/02/21 Python
Python Django路径配置实现过程解析
2020/11/05 Python
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
几个Shell Script面试题
2014/04/18 面试题
优秀党支部事迹材料
2014/01/14 职场文书
国际会议邀请函范文
2014/01/16 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
隐形的翅膀观后感
2015/06/10 职场文书
详解nodejs内置模块
2021/05/06 NodeJs
nginx rewrite功能使用场景分析
2022/05/30 Servers