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的pyxmpp2中的主循环使其提高性能
Apr 24 Python
Python中利用原始套接字进行网络编程的示例
May 04 Python
Python修改MP3文件的方法
Jun 15 Python
Python简单实现enum功能的方法
Apr 25 Python
django框架自定义用户表操作示例
Aug 07 Python
图文详解python安装Scrapy框架步骤
May 20 Python
Django实现跨域请求过程详解
Jul 25 Python
利用python实现PSO算法优化二元函数
Nov 13 Python
Python正则表达式急速入门(小结)
Dec 16 Python
python框架Django实战商城项目之工程搭建过程图文详解
Mar 09 Python
python thrift 实现 单端口多服务的过程
Jun 08 Python
Python使用DFA算法过滤内容敏感词
Apr 22 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
flash用php连接数据库的代码
2011/04/21 PHP
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
php jsonp单引号转义
2014/11/23 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
Yii2实现自定义独立验证器的方法
2017/05/05 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
深入学习JavaScript中的Rest参数和参数默认值
2015/07/28 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
JavaScript数组排序小程序实现解析
2020/01/13 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
Python之列表的插入&amp;替换修改方法
2018/06/28 Python
解决Python一行输出不显示的问题
2018/12/03 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
Python函数和模块的使用总结
2019/05/20 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
Django对models里的objects的使用详解
2019/08/17 Python
python定间隔取点(np.linspace)的实现
2019/11/27 Python
Python 列表的清空方式
2020/01/13 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
社区工作者感言
2014/03/02 职场文书
开学典礼决心书
2014/03/11 职场文书
产品质量承诺范本
2014/03/31 职场文书
植树节口号
2014/06/21 职场文书
士兵突击观后感
2015/06/16 职场文书
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL
python数字转对应中文的方法总结
2021/08/02 Python
Nginx进程调度问题详解
2021/09/25 Servers