分页是网站中比较常见的应用,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. [zhuan]Dalvik 分析 - Class加载篇

    http://blog.csdn.net/zhangyun438/article/details/17192787 内容如下: Java 源代码经过编译后会生成后缀为class的文件,也即字节码文件. ...

  2. 【队列】【P2827】【NOIP2016D2T3】蚯蚓

    传送门 Description 本题中,我们将用符号 $\lfloor c \rfloor$ 表示对 $c$ 向下取整,例如:$\lfloor 3.0 \rfloor = \lfloor 3.1 \r ...

  3. java中静态变量与静态方法的继承(转)

    总结: 1.静态变量与静态方法说继承并不确切,静态方法与变量是属于类的方法与变量.而子类也属于超类,比如说Manage extends Employee,则Manage也是一个Employee,所以子 ...

  4. 阐述ArrayList、Vector、LinkedList的存储性能和特性?

    ArrayList 和Vector他们底层的实现都是一样的,都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内 ...

  5. Android Eclipse 开发环境搭建

    因为开发工具版本 搭建 环境配置经常出现问题 再次用一篇随笔来做下记录 1 需要的工具jdk-6u45-windows-x64 //http://www.oracle.com/technetwork/ ...

  6. 用Apache Spark和TensorFlow进行的深度学习

    原文:https://databricks.com/blog/2016/01/25/deep-learning-with-apache-spark-and-tensorflow.html by Tim ...

  7. CursorAdapter中getView newView bindView异同

    Adapter的作用是界面与数据之间的桥梁,通过设置适配器至ListView控件后(如调用ListView的 setAdapter(ListAdapter adapter)               ...

  8. 在windows下如何使用密钥对远程登录服务器?

    在企业的生产中相信各位朋友都会使用远程登录服务器,这样即高效也非常方便,(服务器在西藏,没有远程技术,公司在北京,你只能到西藏与机器相伴,在这里我使用xshell软件),我们使用ssh 服务登录服务器 ...

  9. 双向数据绑定实现之Object.defineProperty

    vue.js利用的是es5的 defineproperty 特性实现的双向数据绑定,了解一下基本原理. 举例 var person= {}; Object.defineProperty(person, ...

  10. UVA 10766 Organising the Organisation

    https://vjudge.net/problem/UVA-10766 题意: n个员工,除总经理外每个人只能有一个直接上级 有m对人不能成为直接的上下级关系 规定k为总经理 问员工分级方案 无向图 ...