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通过urllib2爬网页上种子下载示例
Feb 24 Python
零基础写python爬虫之urllib2使用指南
Nov 05 Python
Python减少循环层次和缩进的技巧分析
Mar 15 Python
Python中将字典转换为列表的方法
Sep 21 Python
Python处理XML格式数据的方法详解
Mar 21 Python
python实现自动发送邮件
Jun 20 Python
dataframe 按条件替换某一列中的值方法
Jan 29 Python
Python3如何对urllib和urllib2进行重构
Nov 25 Python
Python SSL证书验证问题解决方案
Jan 13 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
May 18 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
Jun 15 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
Jun 23 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/09/04 PHP
基于PHP magic_quotes_gpc的使用方法详解
2013/06/24 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
Laravel框架实现的记录SQL日志功能示例
2018/06/19 PHP
用 javascript 实现的点击复制代码
2007/03/24 Javascript
JavaScript 继承详解(四)
2009/07/13 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
jquery三个关闭弹出层的小示例
2013/11/05 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
Python中的XML库4Suite Server的介绍
2015/04/14 Python
详解python中list的使用
2019/03/15 Python
python实现车牌识别的示例代码
2019/08/05 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
python 解决函数返回return的问题
2020/12/05 Python
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
十佳青年个人事迹材料
2014/01/28 职场文书
校长寄语大全
2014/04/09 职场文书
《画》教学反思
2014/04/14 职场文书
人事任命书格式
2014/06/05 职场文书
七夕情人节促销方案
2014/06/07 职场文书
酒店周年庆活动方案
2014/08/21 职场文书
2015年度个人教学工作总结
2015/05/20 职场文书
java版 简单三子棋游戏
2022/05/04 Java/Android