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查找函数f(x)=0根的解决方法
May 07 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
Sep 26 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
Feb 24 Python
利用pandas读取中文数据集的方法
Jul 25 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
django中SMTP发送邮件配置详解
Jul 19 Python
Python实现的微信红包提醒功能示例
Aug 22 Python
django drf框架自带的路由及最简化的视图
Sep 10 Python
matplotlib jupyter notebook 图像可视化 plt show操作
Apr 24 Python
django的403/404/500错误自定义页面的配置方式
May 21 Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 Python
python爬虫用request库处理cookie的实例讲解
Feb 20 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
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
用php获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
php遍历替换目录下文件指定内容的方法
2016/11/10 PHP
[原创]保存的js无法执行的解决办法
2007/02/25 Javascript
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
编写Js代码要注意的几条规则
2010/09/10 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
2019/08/05 Javascript
vue实现导航菜单和编辑文本的示例代码
2020/07/04 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
Python对列表中的各项进行关联详解
2017/08/15 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
利用Python将图片中扭曲矩形的复原
2020/09/07 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
Wiggle中国:英国骑行、跑步、游泳 & 铁三运动装备专卖网店
2016/08/02 全球购物
伊莱克斯阿根廷网上商店:Tienda Electrolux
2021/03/08 全球购物
J2EE是技术还是平台还是框架
2016/08/14 面试题
法人委托书
2014/07/31 职场文书
执法作风整顿剖析材料
2014/10/11 职场文书
综治工作汇报材料
2014/10/27 职场文书
自主招生学校推荐信范文
2015/03/26 职场文书
离婚案件被告代理词
2015/05/23 职场文书
员工聘用合同范本
2015/09/21 职场文书
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL
Python Matplotlib绘制条形图的全过程
2021/10/24 Python
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android