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 相关文章推荐
Python3之文件读写操作的实例讲解
Jan 23 Python
Python 实现删除某路径下文件及文件夹的实例讲解
Apr 24 Python
对numpy中二进制格式的数据存储与读取方法详解
Nov 01 Python
python3使用matplotlib绘制条形图
Mar 25 Python
详解Python中的测试工具
Jun 09 Python
12个步骤教你理解Python装饰器
Jul 01 Python
pandas基于时间序列的固定时间间隔求均值的方法
Jul 04 Python
python批量图片处理简单示例
Aug 06 Python
python输出决策树图形的例子
Aug 09 Python
pytorch实现对输入超过三通道的数据进行训练
Jan 15 Python
Django REST Framework 分页(Pagination)详解
Nov 30 Python
Python 批量下载阴阳师网站壁纸
May 19 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防注入代码
2010/04/07 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
jquery ajax提交表单数据的两种方式
2009/11/24 Javascript
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
javascript 日期时间 转换的方法
2013/02/21 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
详解vue的数据binding绑定原理
2017/04/12 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
Vue 的双向绑定原理与用法揭秘
2020/05/06 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
python通过ElementTree操作XML获取结点读取属性美化XML
2013/12/02 Python
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
用python登录Dr.com思路以及代码分享
2014/06/25 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
python交互式图形编程实例(二)
2017/11/17 Python
python机器学习之决策树分类详解
2017/12/20 Python
python对excel文档去重及求和的实例
2018/04/18 Python
pytorch permute维度转换方法
2018/12/14 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
2020/02/25 Python
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
开工庆典邀请函范文
2014/01/16 职场文书
自荐信格式简述
2014/01/25 职场文书
用Python selenium实现淘宝抢单机器人
2021/06/18 Python