Django 分页(表单)

news2024/12/21 22:37:48

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, HttpResponse
    
    def paginate(request, page=1):
        # 页码:page
        # 每页数量:per_page
        per_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 Paginator

def paginate2(request, page=1):
    # 每页数量
    per_page = 10
    all_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

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

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

相关文章

将 Python 和 Rust 融合在一起,为 pyQuil® 4.0 带来和谐

文章目录 前言设定方向从 Rust 库构建 Python 软件包改装 pyQuil异步困境回报&#xff1a;功能和性能结论 前言 pyQuil 一直是在 Rigetti 量子处理单元&#xff08;QPUs&#xff09;上构建和运行量子程序的基石&#xff0c;通过我们的 Quantum Cloud Services&#xff08;QCS™…

EBU7140 Security and Authentication(三)密钥管理;IP 层安全

B3 密钥管理 密钥分类&#xff1a; 按时长&#xff1a; short term&#xff1a;短期密钥&#xff0c;用于一次加密。long term&#xff1a;长期密钥&#xff0c;用于加密或者授权。 按服务类型&#xff1a; Authentication keys&#xff1a;公钥长期&#xff0c;私钥短期…

【HarmonyOS开发】共享包HAR和HSP的创建和使用以及三方库的发布

OpenHarmony提供了两种共享包&#xff0c;HAR&#xff08;Harmony Archive&#xff09;静态共享包&#xff0c;和HSP&#xff08;Harmony Shared Package&#xff09;动态共享包。 HAR与HSP都是为了实现代码和资源的共享&#xff0c;都可以包含代码、C库、资源和配置文件&…

C语言——操作符

一、算数操作符 1、(加操作符) 用于将两个数相加&#xff0c;例&#xff1a;3 3结果为6 2、-(减操作符) 用于将两个数相减&#xff0c;例&#xff1a;3 - 3结果为0 3、*(乘操作符) 用于将两个数相乘&#xff0c;例&#xff1a;3 * 3结果为9 4、/(除操作符) 用于将两个…

fastadmin学习02-修改后台管理员账号密码

问题 如果是别人部署好的fastadmin网站不知道后台登录地址和账号密码怎么办 后台登录地址 public目录下有一个很奇怪的php就是后台登录地址啦 忘记账号密码 找到fa_admin&#xff0c;fa_是前缀&#xff0c;肯能每个项目不太一样 UPDATE fa_admin set password1d020dee8ec…

计算机毕业论文内容参考|基于智能搜索引擎的图书管理系统的设计与实现

文章目录 摘要前言绪论课题背景国内外现状与趋势课题内容相关技术与方法介绍系统分析系统设计系统实现系统测试总结与展望摘要 本文介绍了基于智能搜索引擎的图书管理系统的设计与实现。该系统旨在提供一个高效、智能化的图书管理平台,帮助用户更快、更准确地找到所需的图书资…

使用Apache Commons SCXML实现状态机管理

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们程序员在开发过程中&#xff0c;经常会遇到需要管理不同状态和状态之间转换的场景。比如&#xff0c;一个在线购物的订单&#xff0c;它可能有“新建订单”、“已支付”、“配送中”、“已完成”等状态。在这…

Linux/Unix/国产化操作系统常用命令(二)

目录 后CentOS时代国产化操作系统国产化操作系统有哪些常用Linux命令关于Linux的LOGO 后CentOS时代 在CentOS 8发布后&#xff0c;就有了一些变化和趋势&#xff0c;可以说是进入了"后CentOS时代"。这个时代主要表现在以下几个方面&#xff1a; CentOS Stream的引入…

Spring技术内幕笔记之SpringMvc

WebApplicationContext接口的类继承关系 org.springframework.web.context.ContextLoader#initWebApplicationContext 对IOC容器的初始化 SpringMvc如何设计 DispatcherServlet类继承关系 MVC处理流程图如下&#xff1a; DispatcherServlet的工作大致可以分为两个部分&#xf…

Spring Boot 如何使用 Maven 实现多环境配置管理

Spring Boot 如何使用 Maven 实现多环境配置管理 实现多环境配置有以下几个重要原因&#xff1a; 适应不同的部署环境&#xff1a;在实际部署应用程序时&#xff0c;通常会有多个不同的部署环境&#xff0c;如开发环境、测试环境、生产环境等。每个环境可能需要不同的配置&…

Linux 命令tail

命令作用 tail 命令用于显示文件的末尾内容&#xff0c;默认显示文件的最后 10 行。通常情况下&#xff0c;tail 命令用于实时查看动态日志文件&#xff0c;可以使用 -f 参数跟踪文件内容的变化。 语法 tail [选项] [文件名] 参数 以 log.txt 为例演示参数效果 -n -linesK…

解决报错:找不到显卡

今天做实验碰到一个问题&#xff1a;torch找不到显卡&#xff1a; 打开任务管理器&#xff0c;独显直接没了&#xff0c;一度以为是要去修电脑了&#xff0c;突然想到上次做实验爆显存&#xff0c;屏蔽了gpu用cpu训练&#xff1a; import os os.environ["CUDA_DEVICE_OR…

【华为数据之道学习笔记】9-3构建以元数据为基础的安全隐私保护框架

以元数据为基础的安全隐私治理 有决策权的公司高层已经意识到安全隐私的重要性&#xff0c;在变革指导委员会以及各个高层会议纪要中都明确指明安全隐私是变革优先级非常高的主题&#xff0c;安全是一切业务的保障。 基于这个大前提&#xff0c;我们构建了以元数据为基础的安全…

【Spark精讲】记一个SparkSQL引擎层面的优化:SortMergeJoinExec

SparkSQL的Join执行流程 如下图所示&#xff0c;在分析不同类型的Join具体执行之前&#xff0c;先介绍Join执行的基本框架&#xff0c;框架中的一些概念和定义是在不同的SQL场景中使用的。 在Spark SQL中Join的实现都基于一个基本的流程&#xff0c;根据角色的不同&#xff0…

zookeeper未授权访问漏洞增加用户认证修复

linux机器中使用root命令行cd到zookeeper的bin文件夹下 启动zookeeper ./zkCli.sh # 启动zookeeper如果此时有未授权漏洞&#xff0c;可通过以下命令验证。 getAcl / #可以看到默认是world:anyone 就相当于无权限访问验证结果显示没有用户认证也可执行一些命令 增添用户认…

[GKCTF 2020]ez三剑客-eztypecho

[GKCTF 2020]ez三剑客-eztypecho 考点&#xff1a;Typecho反序列化漏洞 打开题目&#xff0c;发现是typecho的CMS 尝试跟着创建数据库发现不行&#xff0c;那么就搜搜此版本的相关信息发现存在反序列化漏洞 参考文章 跟着该文章分析来&#xff0c;首先找到install.php&#xf…

LeetCode第32题 : 最长有效括号

题目介绍 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 示例 1&#xff1a; 输入&#xff1a;s "(()" 输出&#xff1a;2 解释&#xff1a;最长有效括号子串是 "()" 示例 2&#xf…

DALLE·3的图片一致性火了!

DALLE3的图片一致性火了&#xff01; DALLE3 利用种子值&GenID的一致性作图 防止大家不知道&#xff0c;这里拓展一下种子值&#xff0c;DALL每次生成的图像都会有一个新的、随机的种子值。我们可以利用种子值进行角色的变换 每次生成的图像都会有一个新的、随机的种子值…

主流大语言模型集体曝出训练数据泄露漏洞

内容概要&#xff1a; 安全研究人员发现&#xff0c;黑客可利用新的数据提取攻击方法从当今主流的大语言模型&#xff08;包括开源和封闭&#xff0c;对齐和未对齐模型&#xff09;中大规模提取训练数据。当前绝大多数大语言模型的记忆&#xff08;训练数据&#xff09;可被恢…

maven、springboot项目编译打包本地jar、第三方jar包

0. 引言 一般我们在maven项目中都是通过引入pom坐标的形式来引入第三方jar包&#xff0c;但某些场景下&#xff0c;第三方是直接提供的jar包文件&#xff0c;这就需要我们从本地引入第三方包并进行打包。所以我们今天来看下如何进行本地引入第三方包操作 1. 步骤 1、在项目下…