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单元测试unittest实例详解
May 11 Python
Python实现的凯撒密码算法示例
Apr 12 Python
TensorFlow数据输入的方法示例
Jun 19 Python
python远程调用rpc模块xmlrpclib的方法
Jan 11 Python
使用python制作一个解压缩软件
Nov 13 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
Feb 10 Python
Python argparse模块使用方法解析
Feb 20 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
Jupyter notebook如何修改平台字体
May 13 Python
Python flask框架如何显示图像到web页面
Jun 03 Python
详解Python魔法方法之描述符类
May 26 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运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
php实现可运算的验证码
2015/11/10 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
JS方法调用括号的问题探讨
2014/01/24 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
前端自动化开发之Node.js的环境搭建教程
2017/04/01 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
2018/11/21 Javascript
浅谈Node框架接入ELK实践总结
2019/02/22 Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
2019/04/08 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
urllib2自定义opener详解
2014/02/07 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
python输出数学符号实例
2020/05/11 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
CSS3中使用RGBA设置透明度的示例
2015/08/04 HTML / CSS
27个经典Linux面试题及答案,你知道几个?
2013/01/10 面试题
大学生职业规划论文
2014/01/11 职场文书
小学母亲节活动方案
2014/03/14 职场文书
大学生志愿者活动总结
2014/06/27 职场文书
农村文化活动总结
2014/08/28 职场文书
新兵入伍心得体会
2014/09/04 职场文书
承兑汇票转让证明怎么写?
2014/11/30 职场文书
宾馆安全管理制度
2015/08/06 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python
一些让Python代码简洁的实用技巧总结
2021/08/23 Python