Django2.1中的分页功能详解
django的分页功能类将我们常用的多种方法均封装在
Paginator类,根据这些方法我们均可深度定制我们的分页功能。
首先来看看[Paginator] 类的构造方法:
class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)
必选参数:
objects_list: 必须是列表/元组或Django所生成的QuerySet对象,或具有count()或__len __()方法的其他可切片对象。per_page: 每页显示多少个数量,是一个整数
可选参数:
orphans: 默认值为零,无论最后一页剩余多少条数据,都另起一页,否则将剩余的合并到上一页,举例:假如当前分页一共11页,第11页的只有两条数据,那么我们定义orphans=2,则分页总数剩余10页,最后两条数据合并到第10页。allow_empty_first_page: 是否允许第一页为空。 如果为False同时object_list为空,则将引发EmptyPage错误,默认值为True.
Paginator的方法,2.0版后新增:
Paginator.get_page(number)方法:返回当前页页码,并具有处理超出页码范围和无效页码的状况,页码不是数字返回第一页,超出返回最后一页。Paginator.page(number)方法: 返回指定页码的内容,如果给定的页码不存在,则引发InvalidPage。
属性:
Paginator.count: 所有页面中的对象总数。Paginator.num_pages: 分页总数Paginator.page_range: 迭代页码,返回的是一个[1,2,3,4,...]这样的列表。
了解了上边这些之后我们既可以在模板中直接使用Page对象所提供的方法,直接使用!
Page objects对象中的方法及属性:
Page.has_next()如果有下一页返回True.Page.has_previous()如果有上一页返回True.Page.has_other_pages()如果同时具有上下页返回True.Page.next_page_number()返回下一页的页码.Page.previous_page_number()返回上一页的页码.Page.start_index()返回当前页面的第一条数据.Page.end_index()返回当前页的最后一条数据
属性
Page.object_list此页上的对象列表。Page.number此页的基于 1 的页码。Page.paginator关联的 Paginator 对象。
案例详解:
# views.py from django.core.paginator import Paginator def list(request):
LIST = []
for i in range(1,102):
LIST.append(i)
paginator = Paginator(LIST, 10, orphans=2, )
pages = paginator.page_range # 生成所有页码
pages_num = paginator.num_pages # 总也数
gd_page = paginator.page(5) # 调用指定页面的内容
page = request.GET.get('page') # 当前页面
contacts = paginator.get_page(page) # 当前页并具有处理超出页码范围的状况,页码不是数字返回第一页,超出返回最后一页
return render(request, 'notes/list.html',{'contacts':contacts, 'pages':pages, 'pagenums':pages_num, 'gd_page':gd_page})
# list.html
{% for contact in contacts %}
<li>{{ contact|upper }}</li>
{% endfor %}
<h1>分页练习</h1>
{% if contacts.has_previous %}
<li>上一页页码:{{ contacts.previous_page_number }}</li>
<a href="?page={{ contacts.previous_page_number }}">上一页</a>
{% endif %}
<li>当前页码:{{ contacts.number }}</li>
{% if contacts.has_next %}
<li>下一页页码:{{ contacts.next_page_number }}</li>
<a href="?page={{ contacts.next_page_number }}">下一页</a>
{% endif %}
{{ contacts.start_index }}
{{ contacts.end_index }}
<p> 所有页码:</p>
<div class="pagetions">
{% for page in pages %}
{% if page == contacts.number %}
<a class="active" href="?page={{ page }}">{{ page }}</a>
{% else %}
<a href="?page={{ page }}">{{ page }}</a>
{% endif %}
{% endfor %}
</div>
总页数:{{ pagenums }}
{% for gd in gd_page %}
<li>{{ gd }}</li>
{% endfor %}
给定页码:{{ gd_page }}
创作不易,我会持续分享关于Django的相关知识,有兴趣的朋友可以关注本人微信公众号:幸福关中, 如果您觉得不错的话,打赏以下小编,小编会更有动力分享更多关于Django方面的知识,欢迎大家加小编微信交流Django知识,备注Django,小编微信:xingfuguanzhong。
Django2.1中的分页功能详解的更多相关文章
- 【PHP发展史】PHP5.2 到 PHP5.6 中新增的功能详解
截至目前(2014.2), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已经不在维护的 PHP5.2, 其余的一半用户在使用 PHP5.3. 因为 PHP 那“集百家之长”的 ...
- PHP 自 5.2 到 5.6 中新增的功能详解
截至目前(2014.2), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已经不在维护 [注] 的 PHP5.2, 其余的一半用户在使用 PHP5.3 [注].因为 PHP 那 ...
- 【转】PCB中3D相关功能详解
如果PCB Layout工程师能够在设计过程中,使用设计工具直观地看到自己设计板子的实际情况,将能够有效的帮助他们的工作.尤其现在PCB板的设计越来越复杂,密度越来越高,如果能够洞察多层板内部则可以帮 ...
- UIViewController中各方法调用顺序及功能详解
UIViewController中各方法调用顺序及功能详解 UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, ...
- 在ASP.NET 5应用程序中的跨域请求功能详解
在ASP.NET 5应用程序中的跨域请求功能详解 浏览器安全阻止了一个网页中向另外一个域提交请求,这个限制叫做同域策咯(same-origin policy),这组织了一个恶意网站从另外一个网站读取敏 ...
- .NET ORM框架 SqlSuagr4.0 功能详解与实践【开源】
SqlSugar 4.0 ORM框架的优势 为了未来能够更好的支持多库分布式的存储,并行计算等功能,将SqlSugar3.x全部重写,现有的架构可以轻松扩展多库. 源码下载: https://gith ...
- 分享知识-快乐自己:Hibernate 中Criteria Query查询详解
1):Hibernate 中Criteria Query查询详解 当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中. 此外,Hibernate还支持Cr ...
- c++中vector的用法详解
c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...
- JScript中的条件注释详解(转载自网络)
JScript中的条件注释详解-转载 这篇文章主要介绍了JScript中的条件注释详解,本文讲解了@cc_on.@if.@set.@_win32.@_win16.@_mac等条件注释语句及可用于条件编 ...
随机推荐
- AD按键-矩阵按键-独立按键:
原理:利用数组分压+AD采集: 优点:一个IO口可以做成多个按键,节省IO口(矩阵键盘在>4时优点才能体现出来):可备用作为AD基准输入. 缺点:不能做成组合按键(或者电阻要精确选择):且离IO ...
- properties文件 , properties类, 的作用
"properties文件",是java所支持的配置文件类型.java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文 ...
- 冷笑话,idea 按删除键就是undo?
第一反应是keymap被改了,一看 那么,看起来就是alt出问题了 解决方法 在公司换一个键盘或者狂按alt
- Elasticsearch支持的字段类型
es支持下列简单的字段类型: String: string Whole number: byte, short, integer, long Floating point: float, double ...
- spring batch 读取多个文件数据导入数据库
项目的目录结构 需要读取文件的的数据格式 applicatonContext.xml的配置 <?xml version="1.0" encoding="UTF-8& ...
- js中函数声明先提升还是变量先提升
根据官方书籍<你不知道的javascript>(上卷)中写道: "函数会首先被提升,然后才是变量". 例子: console.log(foo); function fo ...
- redis在Windows下以后台服务一键搭建哨兵(主从复制)模式(单机)
redis在Windows下以后台服务一键搭建哨兵(主从复制)模式(单机) 一.概述 此教程介绍如何在windows系统中单机布置redis哨兵模式(主从复制),同时要以后台服务的模式运行.布置以脚本 ...
- java Vamei快速教程13 String类
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 之前的Java基础系列中讨论了Java最核心的概念,特别是面向对象的基础.在Jav ...
- 判断一个字符串是否为GUID的方法
在.net4.0后出现的TryParse方法可以完成这件事情,至于4.0之前的话,也只能是guid.parse()这个方法加上异常去判断了. 方法具体如下: Guid newGuid = Guid.E ...
- BZOJ 3878: [Ahoi2014]奇怪的计算器
BZOJ 3878: [Ahoi2014]奇怪的计算器 标签(空格分隔): OI-BZOJ OI-线段树 Time Limit: 10 Sec Memory Limit: 256 MB Descrip ...