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 相关文章推荐
Python写的Discuz7.2版faq.php注入漏洞工具
Aug 06 Python
python集合类型用法分析
Apr 08 Python
深入理解Python对Json的解析
Feb 14 Python
python3 shelve模块的详解
Jul 08 Python
Python基于matplotlib实现绘制三维图形功能示例
Jan 18 Python
对python中的 os.mkdir和os.mkdirs详解
Oct 16 Python
使用python os模块复制文件到指定文件夹的方法
Aug 22 Python
Python 正则表达式爬虫使用案例解析
Sep 23 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
Python合并2个字典成1个新字典的方法(9种)
Dec 19 Python
Python高并发解决方案实现过程详解
Jul 31 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
Feb 01 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数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
javascript动画之圆形运动,环绕鼠标运动作小球
2010/07/20 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
JQuery教学之性能优化
2014/05/14 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
JavaScript中操作字符串之localeCompare()方法的使用
2015/06/06 Javascript
javascript中offset、client、scroll的属性总结
2015/08/13 Javascript
JavaScript Array对象详解
2016/03/01 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
基于vue写一个全局Message组件的实现
2019/08/15 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
Python实现控制台输入密码的方法
2015/05/29 Python
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
Python中import机制详解
2017/11/14 Python
Python动态生成多维数组的方法示例
2018/08/09 Python
对json字符串与python字符串的不同之处详解
2018/12/19 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
股指期货心得体会
2014/09/13 职场文书
中小学生学籍证明
2014/10/25 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
幼儿园开学家长寄语(2015秋季)
2015/05/27 职场文书