19. Django进阶:分页
一、定义
- 分页是指在web页面有大量数据需要显示,为了阅读方便在每个页面中只显示部分数据
- 优点
- 方便阅读
- 减少数据提取量,减轻服务器压力
- Django提供了Paginator类可以方便的实现分页功能
- Paginator类位于
django.core.paginator
模块中
二、Paginator对象
负责分页数据整体的管理
对象的构造方法
paginator = Paginator(object_list, per_page)
参数
- object_list:需要分类数据的对象列表
- per_page:每页数据个数
返回值
- Paginator对象
三、Paginator属性
- count:需要分页数据的对象总数
- num_pages:分页后的页面总数
- page_range:从1开始的range对象,用于记录当前页码数
- per_page:每页数据的个数
四、Paginator方法
paginator对象.page(number)
- 参数number为页码信息(从1开始)
- 返回当前number页对应的页信息
- 如果提供的页码不存在,抛出
InvalidPage
异常
InvalidPage:总的异常基类,包含以下两个异常子类
- PageNotAnInteger:当向page()传入一个不是整数的值时抛出
- EmptyPage:当向page()提供一个有效值,但是那个页面上没有任何对象时抛出
五、Page对象
负责具体某一页的数据管理
创建对象:
- Paginator对象的page()方法返回Page对象
- page = paginator.page(页码)
六、Page对象属性
- pbject_list:当前页上所有数据对象的列表
- number:当前页的序号,从1开始
- paginator:当前page对象相关的Paginator对象
七、Page对象方法
- has_next():如果有下一页返回True
- has_previous():如果有上一页返回True
- has_other_pages():如果有上一页或下一页返回True
- next_page_number():返回下一页的页码,如果下一页不存在,抛出
InvalidPage
异常 - previous_page_number():返回上一页的页码,如果上一页不存在,抛出
InvalidPage
异常
八、测试
8.1. 视图函数
def test_page(request):# /test_page/4# /test_page?page=1page_num = request.GET.get('page', 1)all_data = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']# 初始化paginatorpaginator = Paginator(all_data, 3)# 初始化 具体页码对应page对象c_page = paginator.page(int(page_num))return render(request, 'test_page.html', locals())
8.2. 路由
from django.urls import path
from . import views
urlpatterns = [path('test_page', views.test_page),
]
8.3. 界面
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>分页</title>
</head>
<body>
{% for p in c_page %}<p>{{ p }}</p>
{% endfor %}{% if c_page.has_previous %}<a href="/test_page?page={{ previous_page_number }}">上一页</a>
{% else %}上一页
{% endif %}{% for p_num in paginator.page_range %}{% if p_num == c_page.number %}{{ p_num }}{% else %}<a href="/test_page?page={{ p_num }}">{{ p_num }}</a>{% endif %}
{% endfor %}{% if c_page.has_next %}<a href="/test_page?page={{ next_page_number }}">下一页</a>
{% else %}下一页
{% endif %}
</body>
</html>
8.4. 效果
19. Django进阶:分页相关推荐
- Django—自定义分页
分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该显示在页面上的数据在数据库表中的起始位置. 确定分页需求: 1. 每页显示的数据条数 2. 每页显示页号链接数 3. 上一页 ...
- Django进阶教程
Django进阶教程 Queryset特性及高级查询技巧 什么是QuerySet QuerySet是Django提供的强大的数据库接口(API).正是因为通过它,我们可以使用filter, exclu ...
- django进阶04部署上线(nginx,uwsgi,supervisor)
原创博文地址:django进阶04部署上线(nginx,uwsgi,supervisor) django自身服务ok python manage.py runserver,验证可正常访问 uwsgi安 ...
- django进阶02websocket
原创博文地址:django进阶02websocket 本文适合有一定websocket基础的,至少完整看过前后端demo的读者,一窍不通的小白建议先阅读"参考"部分的博文扫扫盲. ...
- Django快速分页
分页 在web开发中,对大量的商品进行分页显示,是常见的需求,django对分页直接提供了现成的函数,让我们的开发更为快速便捷... 动图_Django快速分页 在后端(视图函数中) from dja ...
- django进阶07用户模块与权限系统
原创:django进阶07用户模块与权限系统 Django默认提供了用户权限管理模块auth, 1 2 3 user表,User是auth模块中维护用户信息的表,在数据库中该表被命名为auth_use ...
- django进阶06数据库事务
原创:django进阶06数据库事务 锁 1.1:乐观锁: 概念:同一条数据很少会因为并发修改而产生冲突,适用于读多写少的场景. 实现方式:读取一个字段,执行处理逻辑,当需要更新数据时,再次检查该字段 ...
- django进阶05中间件
原创:django进阶05中间件 django进阶05中间件 什么是中间件 django的中间件(middleware)是一个轻量级的插件系统,在django中的请求和响应中,可以利用中间件干预视图的 ...
- django进阶03静态文件和模板
原创博文地址:django进阶03静态文件和模板 静态文件和模板 静态文件:css,js,image,如果作为纯粹的web应用来看,静态文件的响应并不属于web应用范畴,因为静态文件不涉及业务逻辑,也 ...
- Django实现分页功能
在本节中,我们将介绍 Django 为我们提供的高级模块,通过高级模块的学习,你会感受到 Django 的易用性如此之强,但是同时它又很复杂,所以在学习 Django 这样的重度框架的时候,我们一定要 ...
最新文章
- MarkdownPad打开文档This view has crashed错误,内容不显示
- str字符串 encoding( ) 方法
- 怎么向easyui grid里面插入空数据_浅谈数据结算(三)
- mediawiki java_使用MediaWiki 1.16.0实现添加媒体向导
- android 通讯录字母排序,Android仿微信联系人字母排序效果
- Linux USB 驱动开发实例 (三)—— 基于USB总线的无线网卡浅析
- 在Javascript中闭包(Closure)
- [Node.js] mySQL数据库 -- 英雄管理系统(完善)
- php 替换指定标签中的内容,php如何根据不同的条件替换html代码中的img标签
- 怎么让java技术变强_java中的方法
- CodeForces 621C 数学概率期望计算
- Android系统签名以及生成keystore秘钥
- Update批量更新
- Redis基本数据类型,redis官网
- LeetCode - 1419 数青蛙
- 第十三届蓝桥杯大赛JavaB个人赛题题解
- hdu 5148 Cities(树形背包)
- 加拿大:国家资助研究项目IRAP已自主研发区块链浏览器
- Q4营收远超市场预期,唯品会回归“百亿美元大户”躲过倒春寒?
- Windows上下级目录