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 相关文章推荐
推荐11个实用Python库
Jan 23 Python
python通过线程实现定时器timer的方法
Mar 16 Python
使用Python读取安卓手机的屏幕分辨率方法
Mar 31 Python
flask框架使用orm连接数据库的方法示例
Jul 16 Python
python使用suds调用webservice接口的方法
Jan 03 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
Feb 12 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
对python 调用类属性的方法详解
Jul 02 Python
python 执行终端/控制台命令的例子
Jul 12 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
Oct 12 Python
解决pytorch 损失函数中输入输出不匹配的问题
Jun 05 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来写记数器(详细介绍)
2006/10/09 PHP
php项目打包方法
2008/02/18 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
2014/06/29 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
很全面的JavaScript常用功能汇总集合
2016/01/22 Javascript
jQuery获取table行数并输出单元格内容的实现方法
2016/06/30 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
JS检测window.open打开的窗口是否关闭
2017/06/25 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
python追加元素到列表的方法
2015/07/28 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
python定时检测无响应进程并重启的实例代码
2019/04/22 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
keras的三种模型实现与区别说明
2020/07/03 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
Python使用tkinter实现小时钟效果
2021/02/22 Python
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
世界闻名的衬衫制造商:Savile Row Company
2018/07/30 全球购物
一套软件测试笔试题
2014/07/25 面试题
工商学院毕业生个人自我评价
2013/09/19 职场文书
服装厂厂长职责
2013/12/16 职场文书
心理健康教育心得体会
2013/12/29 职场文书
工会积极分子个人总结
2015/03/03 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python
PyTorch中的torch.cat简单介绍
2022/03/17 Python