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 第一步 hello world
Sep 25 Python
分析用Python脚本关闭文件操作的机制
Jun 28 Python
Python导入oracle数据的方法
Jul 10 Python
使用Python编写爬虫的基本模块及框架使用指南
Jan 20 Python
Python requests发送post请求的一些疑点
May 20 Python
pytorch cnn 识别手写的字实现自建图片数据
May 20 Python
Python运维开发之psutil库的使用详解
Oct 18 Python
python自定义线程池控制线程数量的示例
Feb 22 Python
如何使用Flask-Migrate拓展数据库表结构
Jul 24 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
Apr 15 Python
django 外键创建注意事项说明
May 20 Python
关于python中模块和重载的问题
Nov 02 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读写文件的方法(生成HTML)
2006/11/27 PHP
PHP 获取目录下的图片并随机显示的代码
2009/12/28 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
javascript中setTimeout使用指南
2015/07/26 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
2015/11/24 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
2019/02/01 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
vue 封装面包屑组件教程
2020/11/16 Javascript
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
视觉直观感受若干常用排序算法
2017/04/13 Python
Python AES加密实例解析
2018/01/18 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
2018/03/19 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
python中return不返回值的问题解析
2020/07/22 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
上课看小说检讨书
2014/02/22 职场文书
家长会欢迎词
2015/01/23 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
MySQL数字类型自增的坑
2021/05/07 MySQL
Nginx HTTP跳转至HTTPS
2022/05/15 Servers