Django 4.x 智能分页get_elided_page_range

news/2024/5/20 9:40:59

Django智能分页

分页效果

  • 第1页的效果
    在这里插入图片描述
  • 第10页的效果
    在这里插入图片描述
  • 带输入框的效果

主要函数

# 参数解释
# number: 当前页码,默认:1
# on_each_side:当前页码前后显示几页,默认:3
# on_ends:首尾固定显示几页,默认:2
Paginator.get_elided_page_range(number, on_each_side=3, on_ends=2)

代码部分

  • 接口查询
# 获取列表信息
def events(request):event_list = Event.objects.all().order_by("-level", "-begin")# 分页部分的代码page_number = request.GET.get('page', 1)paginator = Paginator(event_list, 15)page_obj = paginator.get_page(page_number)page_range = paginator.get_elided_page_range(number=page_number, on_each_side=3, on_ends=2)return render(request, "events.html", {"page_obj": page_obj, "page_range": page_range})
  • 前端展示
...
{#分页代码,业务代码请自行补充即可#}
{% if page_obj.has_other_pages %}<nav><ul class="pagination justify-content-center">{% if page_obj.has_previous %}<li class="page-item"><a class="page-link" href="?page={{ page_obj.previous_page_number }}">上一页</a></li>{% else %}<li class="page-item disabled"><a class="page-link" href="#">上一页</a></li>{% endif %}{% for item in page_range %}{% if item == page_obj.number %}<li class="page-item active"><a class="page-link" href="?page={{ item }}">{{ item }}</a></li>{% elif item == '...' %}<li class="page-item"><a class="page-link" href="#">{{ item }}</a></li>{% else %}<li class="page-item"><a class="page-link" href="?page={{ item }}">{{ item }}</a></li>{% endif %}{% endfor %}{% if page_obj.has_next %}<li class="page-item"><a class="page-link" href="?page={{ page_obj.next_page_number }}">下一页</a></li>{% else %}<li class="page-item disabled"><a class="page-link" href="#">下一页</a></li>{% endif %}</ul></nav>
{% endif %}

带输入框的效果部分代码

  • 接口查询时添加了总页数
def events(request):event_list = Event.objects.all().order_by("-level", "-begin")# 分页部分的代码page_number = request.GET.get('page', 1)paginator = Paginator(event_list, 15)page_obj = paginator.get_page(page_number)num_pages = paginator.num_pages  # 获取总共有多少页page_range = paginator.get_elided_page_range(number=page_number, on_each_side=3, on_ends=2)return render(request, "events.html", {"page_obj": page_obj, "page_range": page_range, "num_pages ":num_pages })
  • 前端部分添加了输入框
{% if page_obj.has_other_pages %}<nav><ul class="pagination justify-content-center">{% if page_obj.has_previous %}<li class="page-item"><a class="page-link" href="?page={{ page_obj.previous_page_number }}">上一页</a></li>{% else %}<li class="page-item disabled"><a class="page-link" href="#">上一页</a></li>{% endif %}{% for item in page_range %}{% if item == page_obj.number %}<li class="page-item active"><a class="page-link" href="?page={{ item }}">{{ item }}</a></li>{% elif item == '...' %}<li class="page-item"><a class="page-link" href="#">{{ item }}</a></li>{% else %}<li class="page-item"><a class="page-link" href="?page={{ item }}">{{ item }}</a></li>{% endif %}{% endfor %}{% if page_obj.has_next %}<li class="page-item"><a class="page-link" href="?page={{ page_obj.next_page_number }}">下一页</a></li>{% else %}<li class="page-item disabled"><a class="page-link" href="#">下一页</a></li>{% endif %}# 对input输入进行了限制[1, num_pages],防止越界输入# <li class="page-item">&nbsp;共{{ num_pages }}页<label for="p_num">&nbsp;到第</label><input type="text" oninput="if(value>{{ num_pages }})value={{ num_pages }};if(value<0)value=1" id="p_num">&nbsp;</li>#这里引入了一个button点击事件#<li class="page-item"><button class="page-link" id="submit">确定</button></li></ul></nav>
{% endif %}
  • 点击事件处理
 // 就是一个跳转,本想在这里处理输入页码检查的,觉得麻烦就改成input上的输入限制了。$("#submit").click(function () {let page_number = $("#p_num").val();window.location.href=`?page=${page_number}`  });

http://www.mrgr.cn/p/80874054

相关文章

Apache DolphinScheduler 3.3.0 版本重磅更新提前看!

Apache DolphinScheduler 3.3.0版本终于要在万众期待中发布啦!本次发版将有重大功能更新,包括架构上的调整。 为了让广大用户提前尝鲜,社区特别准备了直播活动提前揭秘3.3.0版本中的重要更新,到时候你将会了解到这些信息:3.3.0版本的工作流引擎改进 任务执行流程的优化 架…

激光雕刻优化:利用RLE压缩技术提高雕刻效率与节省能源成本

什么是 RLE &#xff1f;RLE 在激光雕刻应用实现代码&#xff1a;总结 什么是 RLE &#xff1f; RLE 是 Run-Length Encoding&#xff08;游程长度编码&#xff09;的缩写。这是一种数据压缩技术&#xff0c;它通过减少连续重复的数据来减小文件的大小。RLE 在图像处理、无损…

【重塑世界的火种】制造业:从匠人之心到智能未来之旅

在人类文明的宏伟乐章中&#xff0c;有一段旋律始终激昂&#xff0c;它既古老又现代&#xff0c;既是力量的象征&#xff0c;也是智慧的结晶——这就是制造业&#xff0c;一个将梦想变为现实&#xff0c;将创意铸就为生活的神奇领域。今天&#xff0c;让我们一起走进这个塑造世…

【触想智能】工业级平板电脑五大特征与应用领域分析

工业级平板电脑是专供工业环境使用的工业控制计算机,也被称为工控一体机。工业级平板电脑基本性能及兼容性与商用平板电脑几乎相同,但是工业级平板电脑更注重在不同环境下的稳定性能,因此,工业级平板电脑与普通的商用平板电脑存在一定的区别。一、工业级平板电脑的五大特征…

2024软件测试自动化面试题(含答案)

1.如何把自动化测试在公司中实施并推广起来的&#xff1f; 选择长期的有稳定模块的项目 项目组调研选择自动化工具并开会演示demo案例&#xff0c;我们主要是演示selenium和robot framework两种。 搭建自动化测试框架&#xff0c;在项目中逐步开展自动化。 把该项目的自动化…

58微聊消息自动回复 – 58微聊自动回复机器人 – 浏览器插件

58同城上发布了产品,有咨询客户通过微聊联系我们,我们插件可以实现自动回复消息效果演示 58微聊消息自动回复,浏览器插件实现 #自动回复 #58同城 #58 – 抖音 (douyin.com) 功能列表关键词自动回复AI知识库自动回复下载插件 请联系微信:llike620 付费获取浏览器插件 原文地…

企业网站从传统服务器迁移到弹性云有什么优势呢?

现代企业对于网站和应用程序的可用性和性能要求越来越高&#xff0c;传统基础设施可能无法满足这些需求。弹性云作为一种新兴的云计算服务模式&#xff0c;对于企业网站的运行和管理带来了许多优势。下面是企业网站从传统服务器迁移到弹性云的五大优势&#xff1a; 灵活弹性&a…

黑马点评项目总结

登录 基于session登录 短信验证码登录 配置登录拦截器 向 Spring MVC 框架中添加拦截器&#xff0c;LoginInterceptor 是一个自定义的拦截器&#xff0c;用于拦截用户的登录请求。 excludePathPatterns这一句是设置拦截器需要放行的请求路径列表。 "/user/code", …

新版宝塔加密数据解密

宝塔更新了数据存储的方式,PanelForensics会尽快支持最近啊,fic中出现了宝塔,结果PanelForensics居然没有梭哈,这怎么行?? 于是我就一通分析,发现这个版本更新了架构,并且对密码的加解密是通过调用二进制依赖进行实现的 我这里就以mysql的密码为例,在新版本中,mysql的…

【挑战30天首通《谷粒商城》】-【第一天】03、简介-分布式基础概念

文章目录 课程介绍 ( 本章了解即可&#xff0c;可以略过)1、微服务简而言之: 2、集群&分布式&节点2.1、定义2.2、示例 3、远程调用4、负载均衡常见的负裁均衡算法: 5、服务注册/发现&注册中心6、配置中心7、服务熔断&服务降级7.1、服务熔断7.2、服务降级 8、AP…

数据库(MySQL)—— DML语句

数据库&#xff08;MySQL&#xff09;—— DML语句 什么是DML语句添加数据给全部字段添加数据批量添加数据 修改数据删除数据 什么是DML语句 在MySQL中&#xff0c;DML&#xff08;Data Manipulation Language&#xff0c;数据操纵语言&#xff09;语句主要用于对数据库中的数…

MongoDB索引

MongoDB索引 概述 索引支持在MongoDB中高效地执行查询。如果没有索引,MongoDB必须执行全集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常…

Vue2工程化介绍

Vue2项目[基于vue-cli]工程化 【一】环境搭建06-Vue-cli - 刘清政 - 博客园 (cnblogs.com)安装node 使用npm/cnpm npm换源:npm config set registry https://registry.npmmirror.com 安装vue-cli cnpm install -g @vue/cli# 安装脚手架 cnpm install -g @vue/cli # 切换目录,…

jmeter以命令行模式运行:非GUI界面

* `-n`:表示非GUI模式运行:命令行模式运行jmeter脚本 * `-t`:要执行的jmeter脚本(JMX):a.默认执行当前路径下的脚本,b.或执行指定路径下的脚本 * `-l`:生成结果文件(JTL):a.默认在当前路径下生成JTL文件,b.或在指定路径下生成JTL文件 * `-e`:生成HTML报告 * `-o`…

音视频开发3 视频基础,图片基础

图片像素&#xff08;Pixel&#xff09; 一张图片是由多少个 像素 构成的。 例如一张图片是由60x50组成的。 位深度 bit depth RGB表示法 红&#xff08;Red&#xff09;、绿&#xff08;Green&#xff09;、蓝&#xff08;Blue&#xff09; 除了24bit&#xff0c;常见的位深…

【强训笔记】day15

NO.1 代码实现&#xff1a; #include<iostream> #include<cmath>using namespace std; typedef long long ll;int main() {ll x;cin>>x;ll asqrt(x);ll x1a*a,x2(a1)*(a1);if(x-x1<x2-x) cout<<x1<<endl;else cout<<x2<<endl;r…

79. 单词搜索-c++

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。…

直播产品实习生实习体验报告,笔灵AI生成模版分享

实习体验报告&#xff1a;直播产品实习生 如果有不同的岗位需要写的话可以去笔灵生成一下 网址&#xff1a;https://ibiling.cn/scene/inex?fromcsdnsx 一、实习背景我是XXX&#xff0c;作为一名直播产品实习生&#xff0c;我在XX公司进行了为期X个月的实习。在这段时间里&…

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习 1、 for i in range(3):Dev.step(4)Dev.turnLeft()2、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()3、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()4、 for…

RocketMQ 事件驱动:云时代的事件驱动有啥不同?

本文深入探讨了云时代 EDA 的新内涵及它在云时代再次流行的主要驱动力,包括技术驱动力和商业驱动力,随后重点介绍了 RocketMQ 5.0 推出的子产品 EventBridge,并通过几个云时代事件驱动的典型案例,进一步叙述了云时代事件驱动的常见场景和最佳实践。前言: 从初代开源消息队…