博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django Paginator分页模块
阅读量:4286 次
发布时间:2019-05-27

本文共 2807 字,大约阅读时间需要 9 分钟。

Django提供了一些类来帮助你管理分页的数据 -- 也就是说,数据被分在不同页面中,并带有“上一页/下一页”标签。这些类位于django/core/paginator.py中。

示例

向提供对象的列表,以及你想为每一页分配的元素数量,它就会为你提供访问每一页上对象的方法:

>>> from django.core.paginator import Paginator>>> objects = ['john', 'paul', 'george', 'ringo']>>> p = Paginator(objects, 2)>>> p.count4>>> p.num_pages2>>> p.page_range[1, 2]>>> page1 = p.page(1)>>> page1
>>> page1.object_list['john', 'paul']>>> page2 = p.page(2)>>> page2.object_list['george', 'ringo']>>> page2.has_next()False>>> page2.has_previous()True>>> page2.has_other_pages()True>>> page2.next_page_number()Traceback (most recent call last):...EmptyPage: That page contains no results>>> page2.previous_page_number()1>>> page2.start_index() # The 1-based index of the first item on this page3>>> page2.end_index() # The 1-based index of the last item on this page4>>> p.page(0)Traceback (most recent call last):...EmptyPage: That page number is less than 1>>> p.page(3)Traceback (most recent call last):...EmptyPage: That page contains no results

注意

注意你可以向Paginator提供一个列表或元组,Django的QuerySet,或者任何带有count()__len__()方法的对象。当计算传入的对象所含对象的数量时,Paginator会首先尝试调用count(),接着如果传入的对象没有count()方法则回退调用 len()这样会使类似于Django的QuerySet的对象使用更加高效的 count()方法,如果存在的话。

使用 Paginator

这里有一些复杂一点的例子,它们在视图中使用  来为查询集分页。我们提供视图以及相关的模板来展示如何展示这些结果。这个例子假设你拥有一个已经导入的Contacts模型。

视图函数看起来像是这样:

from django.core.paginator import Paginator, EmptyPage, PageNotAnIntegerdef listing(request):    contact_list = Contacts.objects.all()    paginator = Paginator(contact_list, 25) # Show 25 contacts per page    page = request.GET.get('page')    try:        contacts = paginator.page(page)    except PageNotAnInteger:        # If page is not an integer, deliver first page.        contacts = paginator.page(1)    except EmptyPage:        # If page is out of range (e.g. 9999), deliver last page of results.        contacts = paginator.page(paginator.num_pages)    return render_to_response('list.html', {"contacts": contacts})
list.html
模板中,你会想要包含页面之间的导航,以及来自对象本身的任何有趣的信息:

属性

Paginator.
count

所有页面的对象总数。

注意

当计算object_list所含对象的数量时, Paginator会首先尝试调用object_list.count()如果object_list没有 count() 方法,Paginator 接着会回退使用len(object_list)这样会使类似于Django’s QuerySet的对象使用更加便捷的count()方法,如果存在的话。

Paginator.
num_pages

页面总数。

Paginator.
page_range

页码的范围,从1开始,例如[1, 2, 3, 4]

方法

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开始。比如,将五个对象的列表分为每页两个对象,第二页的会返回3

Page.
end_index()

返回当前页上的最后一个对象,相对于分页列表的所有对象的序号,从1开始。 比如,将五个对象的列表分为每页两个对象,第二页的 会返回 4

属性

Page.
object_list

当前页上所有对象的列表。

Page.
number

当前页的序号,从1开始。

Page.
paginator

相关的对象。

转载地址:http://vdxgi.baihongyu.com/

你可能感兴趣的文章
爬虫笔记2--爬取2345网站历史天气
查看>>
C++ 重载、覆盖、隐藏
查看>>
Hyperledger Fabric笔记4--运行IBM Marbles项目
查看>>
Ubuntu小技巧13--grep命令详解
查看>>
Ubuntu小技巧17--常用软件服务配置方法
查看>>
Windows小技巧8--VMware workstation虚拟机网络通信
查看>>
设计模式笔记1--单例模式
查看>>
数据结构与算法2--数组常见操作
查看>>
数据结构与算法3--树常见操作
查看>>
双色球笔记3--输出所有中奖号码
查看>>
双色球笔记4--爬取500彩票网站双色球开奖信息
查看>>
读写CSV文件
查看>>
RIDE屏蔽INFO级别的日志输出
查看>>
Ubuntu小技巧19--Kibana安装方法
查看>>
思科设备常用命令备注
查看>>
linux命令(Ubuntu)
查看>>
URL中的特殊字符
查看>>
搭建本地python环境
查看>>
Spring Boot的两种部署方式:jar包和war包
查看>>
Spring Boot日志配置:logback
查看>>