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中字符串类型json操作的注意事项
May 02 Python
Python实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
python list元素为tuple时的排序方法
Apr 18 Python
Python3.6连接Oracle数据库的方法详解
May 18 Python
pandas计算最大连续间隔的方法
Jul 04 Python
Flask框架钩子函数功能与用法分析
Aug 02 Python
Python学习笔记之函数的参数和返回值的使用
Nov 20 Python
Python数据可视化:泊松分布详解
Dec 07 Python
Keras使用ImageNet上预训练的模型方式
May 23 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
如何向scrapy中的spider传递参数的几种方法
Nov 18 Python
Python爬虫框架之Scrapy中Spider的用法
Jun 28 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 从数据库提取二进制图片的处理代码
2009/09/09 PHP
PHP读取文件的常见几种方法
2016/11/03 PHP
js检测客户端不是firefox则提示下载
2007/04/07 Javascript
YUI 读码日记之 YAHOO.util.Dom - Part.1
2008/03/22 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
AngularJS中ng-class用法实例分析
2017/07/06 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
Vue多选列表组件深入详解
2021/03/02 Vue.js
Python splitlines使用技巧
2008/09/06 Python
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
python实现将内容分行输出
2015/11/05 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
Python帮你识破双11的套路
2019/11/11 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
python3 logging日志封装实例
2020/04/08 Python
python适合做数据挖掘吗
2020/06/16 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
高中毕业的自我鉴定
2013/12/09 职场文书
药品业务员岗位职责
2014/04/17 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
贫困证明怎么写
2015/06/16 职场文书
Golang 并发下的问题定位及解决方案
2022/03/16 Golang