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如何实现守护进程的方法示例
Feb 08 Python
python中requests使用代理proxies方法介绍
Oct 25 Python
import的本质解析
Oct 30 Python
对python的文件内注释 help注释方法
May 23 Python
python中单下划线_的常见用法总结
Jul 10 Python
详解js文件通过python访问数据库方法
Mar 03 Python
Python hexstring-list-str之间的转换方法
Jun 12 Python
JupyterNotebook设置Python环境的方法步骤
Dec 03 Python
Python基础之字符串操作常用函数集合
Feb 09 Python
利用Python脚本批量生成SQL语句
Mar 04 Python
Python使用tkinter实现小时钟效果
Feb 22 Python
教你使用一行Python代码玩遍童年的小游戏
Aug 23 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数组相关函数汇总
2015/03/24 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
js动态创建、删除表格示例代码
2013/08/07 Javascript
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
JavaScript更改原始对象valueOf的方法
2015/03/19 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成&quot;...&quot;)
2016/11/28 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
详解微信UnionID作用
2019/05/15 Javascript
Vue.js组件实现选项卡以及切换特效
2019/07/24 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
python使用PyQt5的简单方法
2019/02/27 Python
详解Python做一个名片管理系统
2019/03/14 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
Python调用.net动态库实现过程解析
2020/06/05 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
html5指南-7.geolocation结合google maps开发一个小的应用
2013/01/07 HTML / CSS
商务主管岗位职责
2013/12/08 职场文书
毕业生求职自荐信怎么写
2014/01/08 职场文书
保险专业自荐信范文
2014/02/20 职场文书
愚人节活动策划方案
2014/03/11 职场文书
Python selenium的这三种等待方式一定要会!
2021/06/10 Python