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中的defaultdict模块和namedtuple模块的简单入门指南
Apr 01 Python
python 设置文件编码格式的实现方法
Dec 21 Python
python使用scrapy发送post请求的坑
Sep 04 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
python ipset管理 增删白名单的方法
Jan 14 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
Jun 03 Python
django+echart数据动态显示的例子
Aug 12 Python
python numpy中cumsum的用法详解
Oct 17 Python
Django操作session 的方法
Mar 09 Python
Python迭代器协议及for循环工作机制详解
Jul 14 Python
python爬虫如何解决图片验证码
Feb 14 Python
python自动化测试之Selenium详解
Mar 13 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设计模式 Command(命令模式)
2011/06/26 PHP
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
使用Apache的rewrite
2021/03/09 Servers
javascript import css实例代码
2008/07/18 Javascript
javascript XML数据显示为HTML一例
2008/12/23 Javascript
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
关于跨站脚本攻击问题
2011/12/22 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
JS保留两位小数,多位小数的示例代码
2014/01/07 Javascript
js中的getAttribute方法使用示例
2014/08/01 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
js实现input密码框提示信息的方法(附html5实现方法)
2016/01/14 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
Python抓取京东图书评论数据
2014/08/31 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
使用python对多个txt文件中的数据进行筛选的方法
2019/07/10 Python
pytorch 共享参数的示例
2019/08/17 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
Python抓包程序mitmproxy安装和使用过程图解
2020/03/02 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
Python远程方法调用实现过程解析
2020/07/28 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
python中yield的用法详解
2021/01/13 Python
详解解决jupyter不能使用pytorch的问题
2021/02/18 Python
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB