zoukankan      html  css  js  c++  java
  • django 分页 Paginator类

    1.django分页-Paginator类

    kevin@kevin:~/huasu_group/trunk/diandingding110/units/adms$ python manage.py shell
    Python 2.7.10 (default, Oct 14 2015, 16:09:02) 
    [GCC 5.2.1 20151010] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    (InteractiveConsole)
    >>> from mysite.manage.models.model_monitor import Monitor
    >>> monitors = Monitor.objects.all()
    >>> from django.core.paginator import Paginator
    >>> p = Paginator(monitors, 10)
    >>> p.count
    509
    >>> p.num_pages
    51
    >>> p.page_range
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]
    >>> page1 = p.page(1)
    >>> page1
    <Page 1 of 51>
    >>> page1.object_list
    [<Monitor: 体验139042427890>, <Monitor: 体验3-设备3>, <Monitor: 测试1-设备1>, <Monitor: 测试集团-设备3>, <Monitor: 测试集团-设备11>, <Monitor: 电器火灾设备1>, <Monitor: 测试单位1-设备1>, <Monitor: test1000026>, <Monitor: 软件部-测试设备12哈哈啊哈哈>, <Monitor: 软件部-水位监测仪2>]
    >>> page2 = p.page(2)
    >>> page2.object_list
    [<Monitor: 灭弧测试设备112>, <Monitor: 在线检测装置3>, <Monitor: 水位检测仪>, <Monitor: 水位检测仪2>, <Monitor: 测试3000002>, <Monitor: 测试3000001>, <Monitor: 测试3100005>, <Monitor: 在线监测装置1(研)>, <Monitor: 测试1999999>, <Monitor: 电器火灾测试111>]
    >>> page2.has_next()
    True
    >>> page2.has_previous()
    True
    >>> page2.has_other_pages()
    True
    >>> page2.next_page_number()
    3
    >>> page2.previous_page_number()
    1
    >>> page2.start_index()
    11
    >>> page2.end_index()
    20

    2.Paginator类

    带两个构造参数,一个就是数据的集合,另一个表示每页放几个数据

    1)构造函数:

    Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)

     

    必传参数

    object_list

    一个list,tuple,django的QuerySet,或者拥有``count()``或``__len__()``方法的 可分解对象。

    per_page

    每一页最大的对象个数。

    可选参数

    orphans

    最后一页对象的最少数目,默认为0。 如果想避免最后一页显示太少。则可以使用这个值。 那么最后一页的数据,自动被前移一页。比如总共23个数据。每页显示 10.orphans=3 那么,第一页为10,第二页为13.

    allow_empty_first_page

    表示首页是否可以为空,如果是 False 而且``object_list`` 为空,那么会触发 EmptyPage 异常。

    2)方法

    Paginator.page(number)

    根据索引number,返回一个’Page’对象,如果不存在,引起 InvalidPage异常

    3)属性

    Paginator.count

    所有对象的总数, 尝试通过``object_list.count()``和``object_list.__len__()`` 取得

    Paginator.num_pages

    总共的页数

    Paginator.page_range

    页的范围,比如 [1, 2, 3, 4] 。

    InvalidPage 异常

    当页面不存在或者无效时,会引起``InvalidPage``异常,一般这个异常就够用,如果需要更 详细信息,还有``PageNotAnInteger``,``EmptyPage``可用:

    PageNotAnInteger

    page() 的参数非整数。

    EmptyPage

    page(x) ,第x页没数据。

    上述两个都是 InvalidPage 的子类。 用一个简单的 except InvalidPage 就可以处理。

    3.Page 类

    1)构造函数

    Page(object_list, number, paginator):

    一般不需用户自己构造,通过`Paginator.page` 生成。

    2)方法

    Page.has_next()

    如果下一页存在,返回True。

    Page.has_previous()

    如果前一页存在返回 True

    Page.has_other_pages()

    如果上一页面或者下一页存在,返回``True``

    Page.next_page_number()

    返回下一页的索引,这个函数比较傻(不管下一页是否存在,都是简单的+1)

    Page.previous_page_number()

    返回上一页的索引,其他同上

    Page.start_index()

    返回当前页,第一个对象的索引。

    Page.end_index()

    道理同上。

    3)属性

    Page.object_list

    当前页对象列表

    Page.number

    当前页的索引

  • 相关阅读:
    webstorm激活方法webstorm注册码 jetbrains激活
    Android获取通讯录并上传(包含通讯录加密)
    2018,愿跟大家一起成长!
    Android Activity的4种启动模式
    微信SDK登录无法调起,微信SDK无法接收回调的几种解决办法
    Android报“android.content.res.Resources$NotFoundException: String resource ID #0x2”错误
    eclipse 和 android studio 编译时报 Unsupported major.minor version 52.0错解决办法
    Git – fatal: Unable to create ‘/.git/index.lock’: File exists错误解决办法
    android中xmlns:tools属性详解
    .NET Core 3.1 跨域请求 (CORS)
  • 原文地址:https://www.cnblogs.com/wangmin0216/p/5942599.html
Copyright © 2011-2022 走看看