Django高级扩展之Paginator分页实现

news2024/10/5 12:23:19

在项目中很常见的一种功能,主要用于大量数据在一页显示过于冗长,分为一页显示多条数据,分隔为多页显示;并常与条件筛选结合使用。

 

目录

Paginator对象

创建对象

属性

方法

异常

Page对象

创建对象

属性

方法

Paginator与page关系

示例

路由

视图

模板

创建列表页面

设置分页

当前页码不可点击

总结


 

Paginator对象

创建对象

格式:Paginator(列表,整数)

返回值:返回分页对象

属性

count 对象的总数

num_pages 页面总数

page_range [1,2, 3, 4],页码列表,从1开始。

方法

page(num) 获得一个page对象,如果提供的页码不存在,会抛出”invoalidPage”

异常

involidPage 当向page()传递的是一个无效的页码时抛出

pageNotAnIntrger 当向page()传递的不是一个整数时抛出

emptyPage 当向page()传递一个有效值,但是该页面没有数据时抛出

Page对象

创建对象

Pageinator对象的page()方法返回得到page对象。不需要手动创建。

属性

object_list 当前页上所有数据(对象)的列表

number 当前页的页码值

Paginator 当前page对象关联的paginator对象

方法

has_next() 判断是否有下一页,如果有返回True

has_previouts() 判断是否有上一页,如果有返回True

has_other_pages 判断是否有上一页或下一页,如果有返回True

next_page_number() 返回下一页的页码,如果下一页不存在抛出invalidPage异常

previous_page_number() 返回上一页的页码,如果下一页不存在抛出invalidPage异常

len() 返回当前页的数据(对象)个数

Paginator与page关系

1.获取班级所有数据记录

2.传递数据集和每页2条给Paginator对象

3.Page对象根据当前分页页码请求相应记录数据

示例

看过上面的概念后,开始实际操作,还是通过完整的MTV来演示。

路由

设置分页列表路由,增加一个页码参数设置。

urlpatterns = [
    path(r'grade_list/<int:num>', views.grade_list, name='grade_list'),
]

视图

获取班级列表数据,做分页处理,赋值模板。

def grade_list(request, num):

    """ 班级分页列表 """

    # 所有班级记录列表
    gradeList = Grades.objects.all()

    # 实例化Paginator 每页显示2条
    paginator = Paginator(gradeList, 2)

    # 获取当前页码数据
    res = paginator.page(num)

    return render(request, 'myapp/gradeList.html', {'res': res})

模板

创建列表页面

内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>班级分页列表</title>
</head>
<body>
    {# 列表内容 #}
    <ul>
        {% for item in res %}
        <li>{{item.name}}</li>
        {% endfor %}
    </ul>
</body>
</html>

设置分页

在班级列表下,增加列表页码。

{# 设置分页页码 #}
<ul>
    {% for index in res.paginator.page_range %}
    <li><a href="{% url 'myapp:grade_list' index %}">{{index}}</a></li>
    {% endfor %}
</ul>

当前页码不可点击

在循环中通过判断分页的当前页码字段,设置当前页码不可点击。

{# 设置分页页码 #}
<ul>
    {% for index in res.paginator.page_range %}
        {% if res.number == index %}
            <li>{{index}}</li>
        {% else %}
            <li><a href="{% url 'myapp:grade_list' index %}">{{index}}</a></li>
        {% endif %}
    {% endfor %}
</ul>

总结

分页的实现就是把封装好的功能,通过对外的入口,传递相应参数就可调用;

实际开发中易于操作方便我们的调用,节省时间。

Django分页原理:获取所有符合条件数据,然后实例化分页对象,最后通过分页对象获取分页数据,返回响应和数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/662134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试之阿里巴巴找黄金宝箱(I)

阿里巴巴找黄金宝箱(I) 题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现了强盗集团的藏宝地&#xff0c;藏宝地有编号从0~N的箱子&#xff0c;每个箱子上面贴有一个数字&#xff0c;箱子中可能有一个黄金宝箱。 黄金宝箱满足排在它之前的所有箱子数字…

Kubernetes Pod 生命周期

Pod 生命周期是其从创建开始至终止退出的事件范围。 Pod 状态 Pending API server 创建了 Pod 对象并已存入 etcd 中&#xff0c;但尚未调度完成或仍处于从镜像仓库下载镜像的过程中。Running Pod 已经被调度至某节点&#xff0c;并且所有容器都已经被 kubelet 创建完成。Suc…

spss分析方法-聚类分析

聚类分析是根据研究对象的特征&#xff0c;按照一定标准对研究对象进行分类的一种分析方法。下面我们主要从下面四个方面来解说&#xff1a; 实际应用理论思想建立模型 分析结果 一、实际应用 聚类分析的目标就是在相似的基础上收集数据来分类。 聚类源于很多领域&#xf…

安装虚幻引擎

1、下载和安装 Epic Games启动程序。 下载地址&#xff1a;https://www.unrealengine.com/zh-CN/download 进入网站你可以看到下载信息和推荐系统要求等&#xff1a; 点击“下载启动程序”即可下载&#xff0c;或者直接点击下载链接&#xff1a;https://epicgames-download1.ak…

37岁985硕士,投上千份简历无人问津......该何去何从

前言 简单自我介绍一下&#xff0c;我老刘&#xff0c;37岁失业的985硕士 &#xff0c;13年其实可以直接入编的我&#xff0c;其实都不需要考试了&#xff0c;可以直接入职&#xff0c;但是我并没有选择去&#xff0c;后面直接选择了新闻周刊干了四年&#xff0c;后面换了一家…

【福利】不用考试可以增持CSPM-2证书?有PMP证书才行!

2021年10月&#xff0c;中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系&#xff0c;开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会&#xff08;CAS&#xff09;组织开展的项…

CSS查缺补漏之《过渡效果与动画效果》

过渡 过渡效果使用transition属性表示&#xff0c;设置在需要过渡效果的元素上&#xff0c;它可以在让元素从一种样式平滑过渡为另一种样式。下面会依次介绍其属性值~ 示例代码如下&#xff1a; <div class"box">世界你好 </div> .box {width: 200px…

多态下,为什么使用virtual修饰析构函数

多态下,为什么使用virtual修饰析构函数 问题&#xff1a; 用virtual修饰的析构函数和非虚函数的析构函数有什么区别&#xff1f; 当时以为&#xff1a;只有经过virtual修饰的析构函数&#xff0c;派生类生命周期结束时&#xff0c;才会自动的先调用派生类的析构函数&#xff0…

mybatisplus连接sqlserver配置

目录 前言&#xff1a; 一&#xff1a;所需依赖&#xff1a; 二&#xff1a;application.yml 三:分页插件 前言&#xff1a; 本文主要讲解连接sqlserver的配置 一&#xff1a;所需依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> &l…

hutool工具包的实用方法简单介绍

说明&#xff1a;Hutool是一个小而全的Java工具类库&#xff08;详细参考&#xff1a;https://hutool.cn/docs/#/&#xff09;&#xff0c;使用前需要先添加依赖 &#xff08;添加依赖&#xff09; <dependency><groupId>cn.hutool</groupId><artifactId…

Redis从入门到精通进阶篇之持久化RDB

文章目录 RDB持久化工作原理 Redis 6的持久化机制主要有两种&#xff1a;RDB&#xff08;Redis DataBase&#xff09;和AOF&#xff08;Append Only File&#xff09;。本文将详细介绍这两种持久化方式的工作原理和配置要点。 RDB持久化 RDB持久化是将当前进程的数据生成快照…

项目经理,35岁以后就很难再有竞争力了吗?

早上好&#xff0c;我是老原。 知乎热榜上有一个问题吸引了我的注意&#xff1a; 说句公道话&#xff0c;35岁确实是个坎&#xff0c;这个坎在吃青春饭的行业来说&#xff0c;格外明显。 体力和精力都大不如年轻人&#xff0c;从性价比的角度来说&#xff0c;公司还是不会用…

2.2ORBSLAM3之几种特征点提取方法

0.简介 本节对ORB特征、SIFT特征、SURF特征、Harris角点、Shi-Tomas角点的提取与描述子计算原理进行总结&#xff0c;其中Harris角点、Shi-Tomas角点是关键点&#xff0c;没有对应的描述子&#xff0c;一般用于光流跟踪(Vins系列算法)。 综合所有的特征检测算法来看&#xff…

win设置静态IP

win设置静态IP地址 前言 局域网&#xff0c;IP地址的管理方式主要有静态分配方式和动态分配方式。 静态分配IP地址是指给每一台计算机都分配一个固定的IP地址&#xff0c;优点是便于管理&#xff0c;特别是在根据IP地址限制网络流量的局域网中&#xff0c;以固定的IP地址或IP地…

Django高级扩展之tinymce富文本实现

目录 安装 在站点中使用 注册富文本应用 添加配置文件 创建模型类 生成迁移文件 执行表迁移 配置站点 富文本不显示解决 修改主题 修改语言设置 自定义视图使用 设置路由 视图 创建模板 总结 安装 pip install django-tinymce 安装过程如下&#xff1a; 在站点…

宾军志:数据管理能力成熟度模型建设历程

4月27日在2023数据治理新实践峰会上&#xff0c;中国电子信息行业联合会数据资产管理专委会秘书长宾军志先生为大家分享了《数据管理能力成熟度模型建设历程》主题演讲。 以下为宾军志先生的演讲实录&#xff0c;为了方便阅读&#xff0c;小编做了一些字句修改和文本优化。大家…

JDK安装2023最完整教程与配置(零基础)

一、JDK简介 学习Java&#xff0c;需要下载并安装JDK&#xff0c;即Java Development Kit、Java开发工具包&#xff0c;为了能够打开java程序&#xff0c;就需要按照操作系统的要求进行环境变量的配置。 二、JDK下载 要想运行java开发的程序&#xff0c;必须先下载jdk&#…

io.netty学习 (一)Netty入门

目录 前言 Java原生API之痛 Netty的优势 非阻塞 I/O 丰富的协议 异步和事件驱动 精心设计的API 丰富的缓冲实现 高效的网络传输 Netty 核心概念 核心组件 传输服务 协议支持 Netty简单应用 总结 前言 关于Netty的学习&#xff0c;最近看了不少有关视频和书籍&am…

【git】VSCode 上的文件夹如何上传到 github 上?

一、重要意义 VSCode 上的文件夹上传到github有什么意义&#xff1f; 版本控制&#xff1a;通过将文件夹上传到GitHub&#xff0c;您可以使用Git进行版本控制。这意味着您可以记录每个文件的修改历史&#xff0c;并轻松地切换到以前的版本。如果您犯了错误或需要回滚更改&…

数据结构与算法·第10章【内部排序】

概念 排序问题可以分为内部排序和外部排序。若整个排序过程不需要访问外存便能完成&#xff0c;则称此类排序问题为内部排序&#xff1b;反之&#xff0c;若参加排序的记录数量很大&#xff0c;整个序列的排序过程不可能在内存中完成&#xff0c;则称此类排序问题为外部排序。…