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

Django 分页(表单)

django-ide


目录

    • 一、手动分页
    • 二、分页器分页


一、手动分页

1、概念

  • 页码:很容易理解,就是一本书的页码
  • 每页数量:就是一本书中某一页中的内容(数据量,比如第二页有15行内容),这 15 就是该页的数据量

每一页的数据量我们可以自定义,比如每页我们要求只显示 10 条数据。

2、功能

比如有数据:1, 2, 3, …, 100

假设我们规定:

页码(page)= 1

每一页(per_page)= 10

页码(page)数据范围(per_page)下标范围切片范围
11 ~ 100 ~ 9[ 0 : 10 ]
211 ~ 2010 ~ 19[ 10 : 20 ]
321 ~ 3020 ~ 39[ 20 : 30 ]
n[ (page-1) * per_page : page * per_page ]

3、案例

实现功能:根据数据量与我们规定的每页数据量自动创建页码按钮,当点击页面对应的页码按钮时,跳转到对应的页码数据。

先创建一百多个测试数据:

image-20230820171104141

  • 视图

    import math
    from App.models import *
    from django.shortcuts import render, HttpResponsedef paginate(request, page=1):# 页码:page# 每页数量:per_pageper_page = 10# 获取数据库PersonModel的所有表数据persons = PersonModel.objects.all()# 对获取的表数据切片操作persons = persons[(page-1) * per_page:page * per_page]# 总页数total = PersonModel.objects.count()        # 数据总条数total_page = math.ceil(total / per_page)   # 总页数(即总条数/每页条数)math.ceil向上取整,即返回大于或等于该数字的最小整数。如果传入的参数已经是整数,则返回该整数本身(如3.5则返回4(即大于3.5的数的最小整数),如7则返回7)。pages = range(1, total_page+1)   # 为什么要转换一下?因为传到模板的数据必须是一个字典,且字典的 values 必须是一个序列# 将切片的数据传入模板进行渲染return render(request, 'paginate.html', {'persons':persons, 'pages': pages})
    
  • 路由

    from django.contrib import admin
    from django.urls import path
    from App.views import *urlpatterns = [path('admin/', admin.site.urls),path('add/', add_person),path('del/', del_person),path('update/', update_person),path('get/', get_person),path('paginate/<int:page>/', paginate, name='paginate'),
    ]
  • 模板

    paginate.html

    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><title>手动分页</title><style>ul {list-style: none;padding: 0;}.bts li {float: left;margin: 5px;}hr {clear: both;}</style>
    </head>
    <body><h2>手动分页功能</h2><hr><ul class="bts">{% for page in pages %}<li><a href="{% url 'paginate' page %}"><button>{{ page }}</button></a></li>{% endfor %}</ul><hr><ul>{% for person in persons %}<li>{{ person.name }} - {{ person.age }}</li>{% endfor %}</ul>
    </body>
    </html>
    
  • 验证

    当点击 15 这个页码按钮时,就会跳到数据的第 15 页的数据。

    image-20230820173413683

二、分页器分页

上面的分页是手动进行的,需要我们手动写功能。当然我们也可以使用 Django 中的分页器进行自动分页,使用时需导入 Paginator 模块。接下来,将使用分页器实现与手动分页功能完全一致的分页方法。

1、视图

import math
from App.models import *
from django.shortcuts import render, HttpResponse
from django.core.paginator import Paginatordef paginate2(request, page=1):# 每页数量per_page = 10all_date = PersonModel.objects.all()# 分页器对象paginator = Paginator(all_date, per_page)   # 获取所有用户数据,并根据每页显示10条用户数据进行分页persons = paginator.page(page)    # 获取指定page页的数据pages = paginator.page_range      # 页码范围,可进行循环遍历return render(request, 'paginate2.html', {'persons': persons, 'pages': pages})

2、路由

from django.contrib import admin
from django.urls import path
from App.views import *urlpatterns = [path('admin/', admin.site.urls),path('add/', add_person),path('del/', del_person),path('update/', update_person),path('get/', get_person),path('paginate/<int:page>/', paginate, name='paginate'),path('paginate2/<int:page>/', paginate2, name='paginate2'),
]

3、模板

paginate2.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>手动分页</title><style>ul {list-style: none;padding: 0;}.bts li {float: left;margin: 5px;}hr {clear: both;}</style>
</head>
<body><h2>手动分页功能</h2><hr><ul class="bts">{% for page in pages %}<li><a href="{% url 'paginate2' page %}"><button>{{ page }}</button></a></li>{% endfor %}</ul><hr><ul>{% for person in persons %}<li>{{ person.name }} - {{ person.age }}</li>{% endfor %}</ul>
</body>
</html>

4、验证

http://127.0.0.1:8000/paginate2/10/

image-20230820181103256

—END

相关文章:

Django 分页(表单)

目录 一、手动分页二、分页器分页 一、手动分页 1、概念 页码&#xff1a;很容易理解&#xff0c;就是一本书的页码每页数量&#xff1a;就是一本书中某一页中的内容&#xff08;数据量&#xff0c;比如第二页有15行内容&#xff09;&#xff0c;这 15 就是该页的数据量 每一…...

socket实现视频通话-WebRTC

最近喜欢研究视频流&#xff0c;所以思考了双向通信socket&#xff0c;接下来我们就一起来看看本地如何实现双向视频通讯的功能吧~ 客户端获取视频流 首先思考如何获取视频流呢&#xff1f; 其实跟录音的功能差不多&#xff0c;都是查询电脑上是否有媒体设备&#xff0c;如果…...

simulink代码生成(九)—— 串口显示数据(纸飞机联合调试)

纸飞机里面的协议是固定的&#xff0c;必须按照协议配置&#xff1b; &#xff08;1&#xff09;使用EasyHEX协议&#xff0c;测试int16数据类型 测试串口发出的数据是否符合&#xff1f; 串口接收数据为&#xff1a; 打开纸飞机绘图侧&#xff1a; &#xff08;1&#xff09…...

Mysql数据库(中)——增删改查的学习(全面,详细)

上一篇主要对查询操作进行了详细的总结&#xff0c;本篇主要对增删改操作以及一些常用的函数进行总结&#xff0c;包括流程控制等&#xff1b;以下的代码可以直接复制到数据库可视化软件中&#xff0c;便于理解和练习&#xff1b; 常用的操作&#xff1a; #函数&#xff1a; S…...

test dbtest-03-对比 Liquibase、flyway、dbDeploy、dbsetup

详细对比 Liquibase、flyway、dbDeploy、dbsetup&#xff0c;给出对比表格 下面是一个简要的对比表格&#xff0c;涵盖了 Liquibase、Flyway、dbDeploy 和 DbSetup 这四个数据库变更管理工具的一些主要特点。 特点/工具LiquibaseFlywaydbDeployDbSetup开发语言Java&#xff0…...

力导向图与矩阵排序

Graph-layout force directed&#xff08;力导向图布局&#xff09;是一种用于可视化网络图的布局算法。它基于物理模型&#xff0c;模拟了图中节点之间的相互排斥和连接弹性&#xff0c;以生成具有良好可读性和美观性的图形布局。 在力导向图布局中&#xff0c;每个节点被视为…...

word 常用功能记录

word手册 多行文字对齐标题调整文字间距打钩方框插入三线表插入参考文献自动生成目录 多行文字对齐 标题调整文字间距 打钩方框 插入三线表 插入一个最基本的表格把整个表格设置为无框线设置上框线【实线1.5磅】设置下框线【实线1.5磅】选中第一行&#xff0c;设置下框线【实线…...

C#线程基础(线程启动和停止)

目录 一、关于线程 二、示例 三、生成效果 一、关于线程 在使用多线程前要先引用命名空间System.Threading&#xff0c;引用命名空间后就可以在需要的地方方便地创建并使用线程。 创建线程对象的构造方法中使用了ThreadStart()委托&#xff0c;当线程开始执行时&#xff0c…...

如何利用ChatGPT来提高编程效率

如何利用ChatGPT来提高编程效率 在当今这个信息爆炸和技术快速发展的时代,程序员们面临着巨大的压力,既要保证代码的质量,又要提高工作效率。幸运的是,人工智能(AI)正在改变我们编写和维护代码的方式,而OpenAI的ChatGPT是其中的佼佼者。本文将讨论如何利用ChatGPT以及结合…...

java智慧工地源码,互联网+建筑工地,实现对工程项目内人员、车辆、安全、设备、材料等的智能化管理

智慧工地全套源码&#xff0c;微服务JavaSpring Cloud UniApp MySql&#xff1b;支持多端展示&#xff08;大屏端、PC端、手机端、平板端&#xff09;演示自主版权。 智慧工地概念&#xff1a; 智慧工地就是互联网建筑工地&#xff0c;是将互联网的理念和技术引入建筑工地&…...

创建并使用自己的C++模块(Windows10+MSVC)

module是C20种新引入的特性&#xff0c;关于module的介绍和好处&#xff0c;网上已有大量的文章&#xff0c;此处也不再赘述&#xff0c;本文仅记录在个人的环境上创建一个简单的module并使用这个module。 环境同上一篇文章&#xff08; windows10&#xff0c;MSVC C工具链&am…...

Spring Boot 2.7.11 集成 GraphQL

GraphQL介绍 GraphQL&#xff08;Graph Query Language&#xff09;是一种用于API的查询语言和运行时环境&#xff0c;由Facebook于2012年创建并在2015年公开发布。与传统的RESTful API相比&#xff0c;GraphQL提供了更灵活、高效和强大的数据查询和操作方式。 以下是GraphQL…...

软件工程期末总结

软件工程期末总结 软件危机出现的原因软件生命周期软件生命周期的概念生命周期的各个阶段 软件开发模型极限编程 可行性研究与项目开发计划需求分析结构化分析的方法结构化分析的图形工具软件设计的原则用户界面设计结构化软件设计面向对象面向对象建模 软件危机出现的原因 忽视…...

MidTool图文创作-GPT-4与DALL·E 3的结合

GPT-4与DALLE 3的结合 GPT-4是由OpenAI开发的最新一代语言预测模型&#xff0c;它在前代模型的基础上进行了大幅度的改进&#xff0c;不仅在文本生成的连贯性、准确性上有了显著提升&#xff0c;还在理解复杂语境和执行多步骤指令方面表现出了更高的能力。而DALLE 3则是一个创…...

Python将两个或多个列表合并为一个列表,并根据每个输入列表中的元素的位置将其组合在一起

将两个或多个列表合并为一个列表&#xff0c;并根据每个输入列表中的元素的位置将其组合在一起。 这个需求在实际开发过程中应该说非常常见&#xff0c;当然python也给我们内置了相关方法&#xff01; zip(*iterables, strictFalse) 在多个迭代器上并行迭代&#xff0c;从每…...

数模混合SoC芯片中LEF2Milkyway的golden flow

在数模混合芯片中的项目中&#xff0c;特别是数字模块很少甚至只有一个简单的数字控制逻辑时&#xff0c;我们要做数字模块的后端实现时&#xff0c;通常模拟那边会问我们实现需要他们提供哪些数据。 通常来说&#xff0c;我们可以让模拟设计提供数字模块的GDS或LEF文件即可。…...

Five tips to make your essay flow

This post was written by Sydney Nicholson, a second-year master’s student in the English Department. Dear writer, Have you ever wondered what it takes to make an essay “flow”? In my time as a writing center tutor, I’ve noticed that this is one of th…...

linux驱动(二):led补

本文主要探讨s5pv210的led驱动相关知识&#xff0c;包括驱动主次设备注册和取消&#xff0c;udev(mdev)机制&#xff0c;静态和动态映射操作寄存器。 字符设备驱动注册 老接口(register_chrdev) static inline int register_chrdev(unsigned int major, const char *n…...

性能测试-jmeter:安装 / 基础使用

一、理解jmeter 官网-Apache JMeter-Apache JMeter™ JMeter是一款开源的性能测试工具&#xff0c;主要用于模拟大量用户并发访问目标服务器&#xff0c;以评估服务器的性能和稳定性。 JMeter可以执行以下任务序号用途描述1性能测试通过模拟多个用户在同一时间对服务器进行请…...

数据仓库-数仓优化小厂实践

一、背景 由于公司规模较小&#xff0c;大数据相关没有实现平台化&#xff0c;相关的架构都是原生的Apache组件&#xff0c;所以集群的维护和优化都需要人工的参与。根据自己的实践整理一些数仓相关的优化。 二、优化 1、简易架构图 2、ODS层优化 2.1 分段式解析 随着业务增长…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...