django实现分页的方法

 更新时间:2015年05月26日 11:06:42   作者:NavCat  
这篇文章主要介绍了django实现分页的方法,实例分析了django分页的技巧与Paginator对象的用法,需要的朋友可以参考下

本文实例讲述了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 %}
&nbsp;
{% if winloglist.has_next %}
<a href="?page={{ winloglist.next_page_number }}" title="下一页">下一页</a>&nbsp
;
{% 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 logging日志模块

    详解 python logging日志模块

    这篇文章主要介绍了详解 python logging日志模块,记录日志最简单的方法就是在你想要记录的地方加上一句 print , 我相信无论是新手还是老鸟都经常这么干。在简单的代码中或者小型项目中这么干一点问题都没有,需要的朋友可以参考下
    2022-01-01
  • 关于DataFrame数据的查询和编辑

    关于DataFrame数据的查询和编辑

    在使用pandas处理DataFrame时,可通过列索引标签获取列数据,行数据的获取可以利用行索引或位置切片,如iloc和loc方法,增加数据时,可通过append方法增加行,直接赋值增加列,删除数据则通过drop方法,通过设置axis参数确定是删除行还是列
    2024-09-09
  • 对django views中 request, response的常用操作详解

    对django views中 request, response的常用操作详解

    今天小编就为大家分享一篇对django views中 request, response的常用操作详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python实现蒙特卡罗模拟法的实践

    python实现蒙特卡罗模拟法的实践

     蒙特卡洛就是产生随机变量,带入模型算的结果,寻优方面,本文主要介绍了python 蒙特卡罗模拟法实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Python进阶语法之类的继承

    Python进阶语法之类的继承

    这篇文章主要为大家介绍了Python类的继承,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • Python中的缩进是什么意思

    Python中的缩进是什么意思

    在Python中,缩进是指在代码中使用空格或制表符来表示代码块的层次结构,Python使用缩进作为语法的一部分,以定义代码的逻辑结构和代码块的范围,本文介绍Python中的缩进是什么意思,感兴趣的朋友一起看看吧
    2024-01-01
  • 使用Python完成15位18位身份证的互转功能

    使用Python完成15位18位身份证的互转功能

    这篇文章主要介绍了使用Python完成15位18位身份证的互转功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • 10分钟快速入门Pandas库

    10分钟快速入门Pandas库

    pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的,这篇文章主要介绍了10分钟快速入门Pandas库,重点介绍pandas常见使用方法,结合实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Python pandas中apply函数简介以及用法详解

    Python pandas中apply函数简介以及用法详解

    apply()函数是pandas里面所有函数中自由度最高的函数, apply()函数的参数是一个函数指针,这里可以使用lambda表达式帮助简化代码,下面这篇文章主要给大家介绍了关于Python pandas中apply函数简介以及用法的相关资料,需要的朋友可以参考下
    2022-09-09
  • 利用Pyhton中的requests包进行网页访问测试的方法

    利用Pyhton中的requests包进行网页访问测试的方法

    今天小编就为大家分享一篇利用Pyhton中的requests包进行网页访问测试的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12

最新评论