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数据结构之二叉树的遍历实例
Apr 29 Python
用Python从零实现贝叶斯分类器的机器学习的教程
Mar 31 Python
Python实现Linux命令xxd -i功能
Mar 06 Python
Python的shutil模块中文件的复制操作函数详解
Jul 05 Python
python处理按钮消息的实例详解
Jul 11 Python
基于Python函数的作用域规则和闭包(详解)
Nov 29 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
Jan 07 Python
python Tkinter版学生管理系统
Feb 20 Python
django中使用POST方法获取POST数据
Aug 20 Python
Python包,__init__.py功能与用法分析
Jan 07 Python
Python实现验证码识别
Jun 15 Python
Python实现仓库管理系统
May 30 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
Laravel中间件实现原理详解
2016/10/09 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
通过jquery 获取URL参数并进行转码
2014/08/18 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
详细谈谈javascript的对象
2016/07/31 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
jQuery实现上传图片前预览效果功能
2017/08/03 jQuery
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
[01:04:09]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第二场 2月2日
2021/03/11 DOTA
python中将阿拉伯数字转换成中文的实现代码
2011/05/19 Python
Python实现类继承实例
2014/07/04 Python
使用graphics.py实现2048小游戏
2015/03/10 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
python3 flask实现文件上传功能
2020/03/20 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
Python跳出多重循环的方法示例
2019/07/03 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
关于Flask项目无法使用公网IP访问的解决方式
2019/11/19 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
python环境下安装opencv库的方法
2020/03/05 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
经贸日语专业个人求职信范文
2013/12/28 职场文书
幼儿园国庆节活动方案
2014/02/01 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
技术入股合作协议书
2014/10/07 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
银行客户经理岗位职责
2015/04/09 职场文书
go语言中切片与内存复制 memcpy 的实现操作
2021/04/27 Golang
vue实现拖拽交换位置
2022/04/07 Vue.js
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL