分页是网站中比较常见的应用,django提供了一些类帮助管理分页的数据,这些类都位于django.core.paginator.py文件里面

分页类

构造函数

class Paginator(object_listper_pageorphans=0allow_empty_first_page=True)

必需参数:

object_list:具有count()或者__len__()方法的可切片的对象,比如列表,元组或者django queryset

per_page:每页最大的条目数量

可选参数:

  • orphans:orphan是孤儿的意思,这个参数指明最后一页的最少条目数字是多少,默认是0。假如orphans是3,你的最后一页只有两个条目,那么这两个条目将会被并到前一页去,而不会形成”孤儿“(最后一个太少条目)
  • allow_empty_first_page:是否允许第一页是空(没有一个条目),如果是假,那么当object_list是空的时候,抛出EmptyPage的错误

方法

  • Paginator.page(number):返回一个页对象(从1开始算起),如果不存在抛出一个InvalidPage异常

属性

  • Paginator.count:object_list中的条目的总条数
  • Paginator.num_pages:总页数
  • Paginator.page_range:页范围,从1开始算起,例如:[1,2,3,4]

InvalidPage 异常

有三个异常,InvalidPage,PageNotAnInteger和EmptyPage,看下面的代码即可以知道他们之间的关系

class InvalidPage(Exception):
pass class PageNotAnInteger(InvalidPage):
pass class EmptyPage(InvalidPage):
pass

页类

Paginator.page()函数返回一个页对象,类原型是class Page(object_list,number,paginator)

方法

  • Page.has_next():如果还有下一页,返回真
  • Page.has_previous():如果有前一页,返回真
  • Page.has_other_pages():如果还有前一页或者下一页,返回真
  • Page.next_page_number():返回下一页的页码,不管下一页是否存在
  • Page.previous_page_number():返回前一页的页码,不管前一页是否存在
  • Page.start_index():当前页的元素的开始编号,例如5个元素每两个元素一页,那么共有三页,第二页的start_index()是3
  • Page.end_index():当前页的元素的结束编号,例如5个元素每两个元素一页,那么共有三页,第二页的end_index()是4

属性

  • Page.object_list:这一页上的元素的形成的列表
  • Page.number:当前页的页码
  • Page.Paginator:关联的Paginator对象

最后我们看一下应用的例子吧:

视图函数:

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

def 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})

模板

{% for contact in contacts %}
{# Each "contact" is a Contact model object. #}
{{ contact.full_name|upper }}<br />
...
{% endfor %} <div class="pagination">
<span class="step-links">
{% if contacts.has_previous %}
<a href="?page={{ contacts.previous_page_number }}">previous</a>
{% endif %} <span class="current">
Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}.
</span> {% if contacts.has_next %}
<a href="?page={{ contacts.next_page_number }}">next</a>
{% endif %}
</span>
</div>

19:django 分页的更多相关文章

  1. django 分页组件

      一.仿django分页功能自己实现 urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from django.contrib i ...

  2. django 分页(2) 使用类 页码显示

    django 分页显示页码 views.py 显示11页码 ) < 起始位置 - 10总页数 else 总页数 > IF 当前页 小于 起始位置 结束页 IF 当前页 大于 IF 如果结束 ...

  3. Django 分页功能

    Django 分页功能比较强大,这边是结合官网的内容写的可以参考 https://docs.djangoproject.com/en/1.9/topics/pagination/ 分页命令行练习案列 ...

  4. 原生的 django 分页

    原始的 django 分页 # 基本 写法 class Paginator(object): def __init__(self, object_list, per_page, orphans=0, ...

  5. Django分页(二)

    Django分页(二) 要求 .设定每页显示数据条数 # # .用户输入页码(第一页.第二页...) # # .设定显示多少页号 # # .获取当前数据总条数 # # .根据设定显示多少页号和数据总条 ...

  6. Django分页(一)

    Django分页(一) 手动实现简单分页 HTML <!DOCTYPE html> <html lang="en"> <head> <me ...

  7. django 分页出现 UnorderedObjectListWarning 错误

    django 分页出现此错误: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unorde ...

  8. 2019.03.20 mvt,Django分页

    MVT模式   MVT各部分的功能:   M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理.       V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返 ...

  9. Django分页类的封装

    Django分页类的封装 Django ORM  封装 之前有提到(Django分页的实现)会多次用到分页,将分页功能封装起来能极大提高效率. 其实不是很难,就是将之前实现的代码全都放到类中,将需要用 ...

  10. Django分页的实现

    Django分页的实现 Django ORM  分页介绍 分页是网页浏览中常见到的一种形式,在数据量较大时,一个页面显示不全,采取分割数据由用户选择进行显示的方式. 基本实现 技术点 通过切片得到数据 ...

随机推荐

  1. POJ2186:Popular Cows——题解

    http://poj.org/problem?id=2186 题面纯英文--就不粘题面了. 简单的说,就是将图强连通分量缩点,然后拓扑一下. 为了避免拓扑,我们可以反向存图,然后查入度为0的点即可. ...

  2. BZOJ5335:[TJOI2018]智力竞赛——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5335 小豆报名参加智力竞赛,他带上了n个好朋友作为亲友团一块来参加比赛. 比赛规则如下: 一共有m ...

  3. application.properties 改成 application.yml

    application.properties 改成 application.yml

  4. Spring.NET中事务管理【转】

    http://www.cnblogs.com/GoodHelper/archive/2009/11/16/springnet_transaction.html 浏览了下写的比较清楚. 在.NET FC ...

  5. 专题训练之2-sat

    推荐几篇博客:https://blog.csdn.net/JarjingX/article/details/8521690 研究总结2-sat问题 https://blog.csdn.net/wher ...

  6. Consul 入门

    1. 什么是Consul? Consul 有很多组件,对于整体来说,它是一个服务发现和服务配置的工具,它提供了一下特性: 服务发现 健康检查 KV存储 多数据中心 2.安装Consul 以下是在 Ce ...

  7. mybatis主键返回的实现

    向数据库中插入数据时,大多数情况都会使用自增列或者UUID做为主键.主键的值都是插入之前无法知道的,但很多情况下我们在插入数据后需要使用刚刚插入数据的主键,比如向两张关联表A.B中插入数据(A的主键是 ...

  8. 由一篇博文做出的代码,不用Math.round()如何实现其功能

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  9. ES6中字符串的扩展

    一.查找字符串 在ES5中,可以使用 indexOf 方法和 lastIndexOf 方法查找字符串: let str = 'hello world'; alert(str.indexOf('o')) ...

  10. 编辑器vi命令

    代码: # vi + 文件名 //将光标放在文档最下面 进入编辑器后: i:插入 x:删除 w:保存 q:退出不保存 q!:强制退出不保存 wq:保存并退出