当前位置: 首页 > news >正文

django项目中通用的分页组件

文章目录

  • 分页组件
    • pager组件代码

分页组件

应用分页组件,需要以下两个步骤:

  1. 视图函数中:(先获取queryset,将request和queryset传入分页组件对象中,得到生成的html标签)

    def customer_list(request):# 所有数据queryset = models.Customer.objects.filter(active=1).select_related('level')pager = Pagination(request, queryset)context = {"queryset": queryset[pager.start:pager.end],"pager_string": obj.html()}return render(request, 'customer_list.html', context)
    
  2. 在页面上:(直接引用即可)

    {% for row in queryset %}{{row.id}}
    {% endfor %}<ul class="pagination">{{ pager_string }}
    </ul>
    

pager组件代码

import copy
from django.utils.safestring import mark_safeclass Pagination(object):""" 分页 """def __init__(self, request, query_set, per_page_count=10):""":param request: 需要用request对象中的GET中的数据进行校验和处理:param query_set: 查询数据库得到的查询集:param per_page_count: 每页显示几条数据"""# 防止分页操作对后续的使用request.GET有影响self.query_dict = copy.deepcopy(request.GET)# 将self.query_dict._mutable设置为True:表示query_dict可修改,默认为Falseself.query_dict._mutable = True# 拿到总数据据数self.query_set = query_settotal_count = query_set.count()self.total_count = total_count# 计算出总共有多少页面self.total_page, div = divmod(total_count, per_page_count)if div:self.total_page += 1# 对url中的请求参数进行校验处理,决定显示那一页page = request.GET.get('page')if not page:page = 1else:if not page.isdecimal():page = 1else:page = int(page)if page <= 0:page = 1else:if page > self.total_page:page = self.total_pageself.page = page# 每页数据条数self.per_page_count = per_page_count# 页面第一条数据self.start = (page - 1) * per_page_count# 页面最后一条数据self.end = page * per_page_countdef html(self):""":return: 生成的当前页面的分页栏html"""pager_list = []if not self.total_page:return ""# 求出生成的分页栏html显示的页面范围if self.total_page <= 11:# 总页码小于11start_page = 1end_page = self.total_pageelse:# 总页码比较多# 判断当前页 <=6: 1~11if self.page <= 6:start_page = 1end_page = 11else:if (self.page + 5) > self.total_page:# 显示最后10页start_page = self.total_page - 10end_page = self.total_pageelse:# 显示前后5页start_page = self.page - 5end_page = self.page + 5# 添加url中的参数,而不是替换:?&age=19&name=123&page=1# 首页self.query_dict.setlist('page', [1])pager_list.append('<li><a href="?{}">首页</a></li>'.format(self.query_dict.urlencode()))# 上一页if self.page > 1:self.query_dict.setlist('page', [self.page - 1])pager_list.append('<li><a href="?{}">上一页</a></li>'.format(self.query_dict.urlencode()))# 当前页+前后5页for i in range(start_page, end_page + 1):self.query_dict.setlist('page', [i])if i == self.page:item = '<li class="active"><a href="?{}">{}</a></li>'.format(self.query_dict.urlencode(), i)else:item = '<li><a href="?{}">{}</a></li>'.format(self.query_dict.urlencode(), i)pager_list.append(item)# 下一页if self.page < self.total_page:self.query_dict.setlist('page', [self.page + 1])pager_list.append('<li><a href="?{}">下一页</a></li>'.format(self.query_dict.urlencode()))# 尾页self.query_dict.setlist('page', [self.total_page])pager_list.append('<li><a href="?{}">尾页</a></li>'.format(self.query_dict.urlencode()))pager_list.append('<li class="disabled"><a>数据{}条{}页</a></li>'.format(self.total_count, self.total_page))pager_string = mark_safe("".join(pager_list))return pager_string

可能用到django框架中QueryDict知识点,可以看看Django框架中的:QueryDict(处理url参数)

若有错误与不足请指出,关注DPT一起进步吧!!!

相关文章:

django项目中通用的分页组件

文章目录 分页组件pager组件代码 分页组件 应用分页组件&#xff0c;需要以下两个步骤&#xff1a; 视图函数中&#xff1a;&#xff08;先获取queryset&#xff0c;将request和queryset传入分页组件对象中&#xff0c;得到生成的html标签&#xff09; def customer_list(requ…...

想实现ubuntu搭建sqli-labs靶场

目录 首先前期的nginx和php部署完成​编辑​编辑 Xftp导入sqli-labs 遇到了的问题 它提示我们请检查db-creds.inc 去尝试解决这个问题 尝试修改MySQL root密码 修改db-creds.inc配置 再次尝试依旧失败 思考&#xff1a;会不会是MySQL版本过高的原因 重新下载MySQL5.7.…...

tp8 按日期分组查出数据

1.如果数据库里时间字段都是时间戳,使用mysql中的from_unixtime()函数 field("from_unixtime(create_time,%Y-%m-%d) as time,group_concat(id)")->group(time)->select()2. 如果数据库是普通的日期格式&#xff08;如2024-01-02 01:23:50&#xff09;&#x…...

单例模式(懒汉模式,饿汉模式)

单例的饿汉模式&#xff1a;在主函数未调用之前该单例就已经存在了&#xff0c;所以不存在线程安全的问题。 class Singleton { private: Singleton(){} public:static Singleton s1;static Singleton* GetInstance(){return &s1;}Singleton(const Singleton&) delet…...

【Qt】Item Widgets 多元素控件

Qt中提供的多元素控件有&#xff1a; QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView 上述控件分为Widget和View&#xff0c;其区别如下&#xff1a; 以QTableWidget和QTableView为例 QTableView是基于MVC(Model-View-Controller)设计的控件。QTableView自身…...

sharded_inference_engine:MLXDynamicShardInferenceEngine;step

目录 sharded_inference_engine:MLXDynamicShardInferenceEngine 类属性 方法 __init__(self) async def infer_prompt(self, shard: Shard, prompt: str, inference_state: Optional[str] = None) -> (np.ndarray, str, bool) async def infer_tensor(self, shard: …...

JAVA开发学习-day21

JAVA开发学习-day21 1. 删除表单数据 根据ElementUI的官方组件指南&#xff0c;为表单每列的数据添加删除按钮 <el-table :data"tableData" style"width: 100%"><el-table-column prop"id" label"ID" width"180"…...

Python的安装环境以及应用

1.环境python2&#xff0c;Python 最新安装3.12可以使用源码安装 查看安装包 [rootpython001 ~]# yum list installed | grep epel 3[rootpython001 ~]# yum list installed | grep python [rootpython001 ~]# yum -y install python3 安装python3 查看版本 [root…...

TabLayout使用以及自定义tab标签

<?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tool…...

第二十节、有限状态机和抽象类多态

一、抽象类 挂载到动画器上的就是继承抽象类代码 1、使用onenable周期函数启用 2、在每一个周期函数中对抽象类进行调用 3、隐藏公开的变量...

SQL注入实例(sqli-labs/less-23)

0、初始网页 1、闭合方式判断 闭合符号为单引号&#xff0c;通过测试发现过滤了注释&#xff0c;所以直接闭合 2、确定查询表的列数 确定查询表的列数为3列 ?id1 order by 3 3、确定回显位置 回显位置为第二列和第三列 ?id-1 union select 1,2,3 4、查看当前登录和数据…...

3.Redis数据类型(二)

LIST List 是一个简单的双向链表&#xff0c;支持从两端进行插入和删除操作。 常用命令&#xff1a; lpush/rpush/lrange lpush 插入一个或多个元素到列表的左端。 rpush 插入一个或多个元素到列表的右端。 lrange key start stop 获取元素&#xff08;前闭后闭&#xff0…...

JavaWeb系列十一: Web 开发会话技术Session

Web 开发会话技术Session Session有什么用session基本原理session原理示意图session可以做什么如何理解Session Session常用方法Session底层实现机制原理分析图应用实例session实现原理动画 Session生命周期Session生命周期说明Session生命周期实例 作业布置 Session有什么用 …...

k8s中yaml文件的编写

目录 1.编写pod.yaml 2.编写deploment.yaml 3.编写service.yaml关联创建的pod 4.总结获取K8S资源配置清单文件模板方法 5.补充 1.编写pod.yaml vim demo1-pod.yaml apiVersion: v1 kind: Pod metadata:name: scj-podnamespace: xy101labels:app: nginxmylove: tangjunmyc…...

打卡第37天------动态规划

加油!不要放弃,那些冲进清北复交的高材生的水平真不是盖的,名不虚传,有实力的全能选手。我在刷题的过程中不得不表达一下对他们的钦佩。 这里在遍历顺序上可就有说法了。 如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for…...

openfeign本地试用

目的&#xff1a;在本地搭建一个简单的openfeign使用场景&#xff0c;测试查询、新增等功能 平台&#xff1a;win10 技术栈&#xff1a;Springboot, SpringCloud, Nacos, Mybatis, MySql, Logback 框架作用说明&#xff1a; Nacos用于服务注册&#xff0c;将provider应用注…...

数据库|SQLServer数据库:查询函数(SUM、COUNT、MAX、MIN、AVG)的使用

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 日拱一卒&#xff0c;进一寸有进一寸的欢喜&#xff0c;本节学习数据库查询函数的使用。 以下为学习笔记。 01 求和 SUM&#xff1a;对某一字段列进行求和运算&#xff1b; 示例&#xff1a; 对账号表Account的文章…...

简单Qt贪吃蛇项目

目录 先看效果 项目介绍 界面一&#xff1a;游戏大厅界面 界面二&#xff1a;关卡选择界面​编辑 界面三&#xff1a;游戏界面 游戏大厅页面 游戏关卡选择页面 游戏房间页面 封装贪吃蛇数据结构 初始化游戏房间界面 设置窗口大小、标题、图标等 蛇的移动 初始化贪…...

画菱形(曼哈顿距离)

输入一个奇数 nn&#xff0c;输出一个由 * 构成的 nn 阶实心菱形。 输入格式 一个奇数 nn。 输出格式 输出一个由 * 构成的 nn 阶实心菱形。 具体格式参照输出样例。 数据范围 1≤n≤991≤n≤99 输入样例&#xff1a; 5输出样例&#xff1a; * *** ******** * #i…...

CSP初赛知识点讲解(六)

CSP初赛知识点讲解&#xff08;六&#xff09; 运算表达式中缀变后缀表达式求值前缀表达式 例题训练&#xff08;八&#xff09; 运算表达式 运算表达式有三种&#xff0c;前缀表达式&#xff0c;中缀表达式&#xff0c;后缀表达式&#xff0c;我们常用的是中缀表达式&#xf…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

shell脚本质数判断

shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数&#xff09;shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数&#xff09; 思路&#xff1a; 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...