6-Django项目--分页模块化封装参数共存

目录

utils/page_data.py

分页模块化封装

在app当中创建一个python package

在当前包里面创建py文件

参数共存

完整代码


utils/page_data.py

--包里创建py文件.

# -*- coding:utf-8 -*-
from django.utils.safestring import mark_safe
from copy import deepcopy

class PageData(object):
    def __init__(self, request, queryset, page_size=10, plus=2, page_param="page"):
        """
            request: 请求
            queryset:数据表查询的结果
            page_size:每页展示多少条数据
            plus:当前页,前后各展示多少个页码
        """
        get_query_dict = deepcopy(request.GET)
        self.query_dict = get_query_dict
        self.page_param = page_param
        # 分页
        page = request.GET.get(page_param, "1")  # 当前所在的页面
        # 判断字符创当中全部都是数字
        if page.isdecimal():
            page = int(page)
        else:
            page = 1

        self.page = page
        self.start = (page - 1) * page_size
        self.end = page * page_size
        # 分页操作
        self.page_queryset = queryset[self.start: self.end]
        page_count = queryset.count()
        page_count, div = divmod(page_count, page_size)
        if div:
            page_count += 1
        self.page_count = page_count
        self.plus = plus

    def page_html(self):
        if self.page_count <= 2 * self.plus + 1:
            start_page = 1
            end_page = self.page_count
        else:
            # 当前选中的页数小于等于三
            if self.page <= self.plus:
                start_page = 1
                end_page = 2 * self.plus + 1
            else:
                # 当前页 + 2
                if (self.page + self.plus) > self.page_count:
                    start_page = self.page_count - self.plus * 2
                    end_page = self.page_count
                else:
                    start_page = self.page - self.plus
                    end_page = self.page + self.plus

        page_str_list = []
        # 首页
        self.query_dict.setlist(self.page_param, [1])
        page_str_list.append(
            f'<li><a href="?{self.query_dict.urlencode()}" aria-label="Previous"><span aria-hidden="true">首页</span></a></li>')

        # 上一页
        if self.page > 1:
            self.query_dict.setlist(self.page_param, [self.page-1])
            page_str_list.append(
                f'<li><a href="?{self.query_dict.urlencode()}" aria-label="Previous"><span aria-hidden="true">«</span></a></li>')
        else:
            page_str_list.append(
                f'<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">«</span></a></li>')

        for page_num in range(start_page, end_page + 1):
            if page_num == self.page:
                self.query_dict.setlist(self.page_param, [page_num])
                page_ele = f'<li class="active"><a href="?{self.query_dict.urlencode()}">{page_num}</a></li>'
            else:
                self.query_dict.setlist(self.page_param, [page_num])
                page_ele = f'<li><a href="?{self.query_dict.urlencode()}">{page_num}</a></li>'
            page_str_list.append(page_ele)
        # 下一页
        if self.page < self.page_count:
            self.query_dict.setlist(self.page_param, [self.page + 1])
            page_str_list.append(
                f'<li><a href="?{self.query_dict.urlencode()}" aria-label="Next"><span aria-hidden="true">»</span></a></li>')
        else:
            page_str_list.append(
                f'<li class="disabled"><a href="#" aria-label="Next"><span aria-hidden="true">»</span></a></li>')

        # 尾页
        self.query_dict.setlist(self.page_param, [self.page_count])
        page_str_list.append(
            f'<li><a href="?{self.query_dict.urlencode()}" aria-label="Previous"><span aria-hidden="true">尾页</span></a></li>')
        # 将列表当中的字符串传递给html,并且一标签的形式展示
        search_page = """
            <li>
                <form method="get" style="float: left;margin-left: 1px">
                    <input type="text" class="form-control" placeholder="页码" name="page" style="position: relative;display: inline-block;width: 75px">
                    <button class="btn btn-success btn-sm" type="submit">跳转</button>
                </form>
            </li>
            """
        page_str_list.append(search_page)
        page_string = mark_safe("".join(page_str_list))
        return page_string


分页模块化封装

  • 在app当中创建一个python package

  • 在当前包里面创建py文件

    # -*- coding:utf-8 -*-
    from django.utils.safestring import mark_safe
    from copy import deepcopy
    ​
    class PageData(object):
        def __init__(self, request, queryset, page_size=10, plus=2, page_param="page"):
            """
                request: 请求
                queryset:数据表查询的结果
                page_size:每页展示多少条数据
                plus:当前页,前后各展示多少个页码
            """
            get_query_dict = deepcopy(request.GET)
            self.query_dict = get_query_dict
            self.page_param = page_param
            # 分页
            page = request.GET.get(page_param, "1")  # 当前所在的页面
            # 判断字符创当中全部都是数字
            if page.isdecimal():
                page = int(page)
            else:
                page = 1
    ​
            self.page = page
            self.start = (page - 1) * page_size
            self.end = page * page_size
            # 分页操作
            self.page_queryset = queryset[self.start: self.end]
            page_count = queryset.count()
            page_count, div = divmod(page_count, page_size)
            if div:
                page_count += 1
            self.page_count = page_count
            self.plus = plus
    ​
        def page_html(self):
            if self.page_count <= 2 * self.plus + 1:
                start_page = 1
                end_page = self.page_count
            else:
                # 当前选中的页数小于等于三
                if self.page <= self.plus:
                    start_page = 1
                    end_page = 2 * self.plus + 1
                else:
                    # 当前页 + 2
                    if (self.page + self.plus) > self.page_count:
                        start_page = self.page_count - self.plus * 2
                        end_page = self.page_count
                    else:
                        start_page = self.page - self.plus
                        end_page = self.page + self.plus
    ​
            page_str_list = []
            # 首页
            page_str_list.append(
                f'<li><a href="?page=1" aria-label="Previous"><span aria-hidden="true">首页</span></a></li>')
    ​
            # 上一页
            if self.page > 1:
                page_str_list.append(
                    f'<li><a href="?page={self.page - 1}" aria-label="Previous"><span aria-hidden="true">«</span></a></li>')
            else:
                page_str_list.append(
                    f'<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">«</span></a></li>')
    ​
            for page_num in range(start_page, end_page + 1):
                if page_num == self.page:
                    page_ele = f'<li class="active"><a href="?page={page_num}">{page_num}</a></li>'
                else:
                    page_ele = f'<li><a href="?page={page_num}">{page_num}</a></li>'
                page_str_list.append(page_ele)
            # 下一页
            if self.page < self.page_count:
                page_str_list.append(
                    f'<li><a href="?page={self.page + 1}" aria-label="Next"><span aria-hidden="true">»</span></a></li>')
            else:
                page_str_list.append(
                    f'<li class="disabled"><a href="#" aria-label="Next"><span aria-hidden="true">»</span></a></li>')
    ​
            # 尾页
            page_str_list.append(
                f'<li><a href="?page={self.page_count}" aria-label="Previous"><span aria-hidden="true">尾页</span></a></li>')
            # 将列表当中的字符串传递给html,并且一标签的形式展示
            search_page = """
                <li>
                    <form method="get" style="float: left;margin-left: 1px">
                        <input type="text" class="form-control" placeholder="页码" name="page" style="position: relative;display: inline-block;width: 75px">
                        <button class="btn btn-success btn-sm" type="submit">跳转</button>
                    </form>
                </li>
                """
            page_str_list.append(search_page)
            page_string = mark_safe("".join(page_str_list))
            return page_string

 


参数共存

  • 在做搜索的过程当中,翻页的时候,搜索的条件还在

    在翻页的时候,始终展示搜索出来满足条件的数据

    get_query_dict = deepcopy(request.GET)
        # 在get请求当中,固定存放一个page,有其他参数,不会被替换
        get_query_dict.setlist("page", [1])
        # 将两个参数使用&符号拼接起来
        # ?page=1&search=100
        print(get_query_dict.urlencode())
    # 搜索的时候,出现的参数
        http://127.0.0.1:8000/asset/data/?search=100
    # 做翻页的时候,搜索参数还在
        http://127.0.0.1:8000/asset/data/?search=100&page=3

--无论怎么搜索,查找,都只显示一个参数. 

  • 完整代码

    # -*- coding:utf-8 -*-
    from django.utils.safestring import mark_safe
    from copy import deepcopy
    ​
    class PageData(object):
        def __init__(self, request, queryset, page_size=10, plus=2, page_param="page"):
            """
                request: 请求
                queryset:数据表查询的结果
                page_size:每页展示多少条数据
                plus:当前页,前后各展示多少个页码
            """
            get_query_dict = deepcopy(request.GET)
            self.query_dict = get_query_dict
            self.page_param = page_param
            # 分页
            page = request.GET.get(page_param, "1")  # 当前所在的页面
            # 判断字符创当中全部都是数字
            if page.isdecimal():
                page = int(page)
            else:
                page = 1
    ​
            self.page = page
            self.start = (page - 1) * page_size
            self.end = page * page_size
            # 分页操作
            self.page_queryset = queryset[self.start: self.end]
            page_count = queryset.count()
            page_count, div = divmod(page_count, page_size)
            if div:
                page_count += 1
            self.page_count = page_count
            self.plus = plus
    ​
        def page_html(self):
            if self.page_count <= 2 * self.plus + 1:
                start_page = 1
                end_page = self.page_count
            else:
                # 当前选中的页数小于等于三
                if self.page <= self.plus:
                    start_page = 1
                    end_page = 2 * self.plus + 1
                else:
                    # 当前页 + 2
                    if (self.page + self.plus) > self.page_count:
                        start_page = self.page_count - self.plus * 2
                        end_page = self.page_count
                    else:
                        start_page = self.page - self.plus
                        end_page = self.page + self.plus
    ​
            page_str_list = []
            # 首页
            self.query_dict.setlist(self.page_param, [1])
            page_str_list.append(
                f'<li><a href="?{self.query_dict.urlencode()}" aria-label="Previous"><span aria-hidden="true">首页</span></a></li>')
    ​
            # 上一页
            if self.page > 1:
                self.query_dict.setlist(self.page_param, [self.page-1])
                page_str_list.append(
                    f'<li><a href="?{self.query_dict.urlencode()}" aria-label="Previous"><span aria-hidden="true">«</span></a></li>')
            else:
                page_str_list.append(
                    f'<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">«</span></a></li>')
    ​
            for page_num in range(start_page, end_page + 1):
                if page_num == self.page:
                    self.query_dict.setlist(self.page_param, [page_num])
                    page_ele = f'<li class="active"><a href="?{self.query_dict.urlencode()}">{page_num}</a></li>'
                else:
                    self.query_dict.setlist(self.page_param, [page_num])
                    page_ele = f'<li><a href="?{self.query_dict.urlencode()}">{page_num}</a></li>'
                page_str_list.append(page_ele)
            # 下一页
            if self.page < self.page_count:
                self.query_dict.setlist(self.page_param, [self.page + 1])
                page_str_list.append(
                    f'<li><a href="?{self.query_dict.urlencode()}" aria-label="Next"><span aria-hidden="true">»</span></a></li>')
            else:
                page_str_list.append(
                    f'<li class="disabled"><a href="#" aria-label="Next"><span aria-hidden="true">»</span></a></li>')
    ​
            # 尾页
            self.query_dict.setlist(self.page_param, [self.page_count])
            page_str_list.append(
                f'<li><a href="?{self.query_dict.urlencode()}" aria-label="Previous"><span aria-hidden="true">尾页</span></a></li>')
            # 将列表当中的字符串传递给html,并且一标签的形式展示
            search_page = """
                <li>
                    <form method="get" style="float: left;margin-left: 1px">
                        <input type="text" class="form-control" placeholder="页码" name="page" style="position: relative;display: inline-block;width: 75px">
                        <button class="btn btn-success btn-sm" type="submit">跳转</button>
                    </form>
                </li>
                """
            page_str_list.append(search_page)
            page_string = mark_safe("".join(page_str_list))
            return page_string

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网线水晶头为什么要按标准线序打

网线接水晶头为什么要按照线序接&#xff1f; 减少串扰和增强信号质量&#xff1a; 双绞线的设计是为了减少信号间的串扰&#xff08; Crosstalk&#xff09;&#xff0c;每一对线芯在传输过程中通过相互扭绞抵消外部电磁干扰。按照标准线序接线能够确保每一对线芯之间的信号传…

maridb10.4.30数据库数据迁移

1.新建数据存储文件夹&#xff0c;例如E:\maridb_data 2.修改原数据所在目录的my.ini文件&#xff0c;例如D:\Program Files\MariaDB 10.4\data\my.ini 3.剪切除my.ini文件外的其他所有文件到迁移目的地文件(E:\maridb_data) 结果如下&#xff1a; 原数据文件目录&#xff1a…

MySQL—约束—外键约束(基础)

一、引言 概念&#xff1a;外键用来让两张表的数据之间建立连接&#xff0c;从而保证数据的一致性和完整性。 举个例子&#xff1a; 提示说明&#xff1a;&#xff08;有两张表&#xff09; &#xff08;1&#xff09;员工表&#xff1a;emp id&#xff1a;主键、姓名、年龄、…

qt+ffmpeg 实现音视频播放(四)之音视频同步

在处理音视频数据时&#xff0c;解码音频的数据往往会比解码视频的数据比较慢&#xff0c;所以我们在播放音视频时&#xff0c;音频和视频的数据会出现渐渐对不上的情况。尤其在播放时间越长的时候&#xff0c;这种对不上的现象越明显。 为了解决这一问题&#xff0c;人们想出…

485通讯网关

在工业自动化与智能化的浪潮中&#xff0c;数据的传输与交互显得尤为重要。作为这一领域的核心设备&#xff0c;485通讯网关凭借其卓越的性能和广泛的应用场景&#xff0c;成为了连接不同设备、不同协议之间数据转换和传输的桥梁。在众多485通讯网关中&#xff0c;HiWoo Box以其…

MySQL报ERROR 2002 (HY000)解决

今天在连接客户服务器时MySQL的时候报: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql/mysql.sock’ (2) [rootXXX ~]# mysql -uroot -p Enter password: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket…

SpringBoot邮件发送的安全性如何有效保障?

SpringBoot邮件发送服务如何集成&#xff1f;怎么优化邮件发送&#xff1f; Spring Boot作为一个流行的Java开发框架&#xff0c;提供了便捷的邮件发送功能&#xff0c;使得开发者可以轻松地集成邮件发送到他们的应用程序中。AokSend将探讨如何有效地保障Spring Boot邮件发送的…

linux驱动学习(四)之module

一、内核模块 内核模块是一种可以动态加载到操作系统内核中并扩展其功能的软件。它们允许在运行的操作系统内核中增加新的功能或驱动程序&#xff0c;而无需重新启动计算机。 在linux系统中&#xff0c;驱动程序是各自独立存在的&#xff0c;而且驱动程序中包含一个moudle&am…

抽屉式备忘录(共25041字)

Sing Me to Sleep <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>与妖为邻的备忘录</title&g…

【UE5.1 角色练习】09-物体抬升、抛出技能 - part1

前言 在上一篇&#xff08;【UE5.1 角色练习】08-传送技能&#xff09;的基础上继续实现控制物体抬升、抛出的功能。 效果 步骤 一、准备技能动画 1. 在项目设置中新建一个操作映射&#xff0c;这里命名为“Skill_GravityControl”&#xff0c;用按键4触发 2. 通过IK重定向…

ESP使用巴法云远程OTA(VScode + Platform io)

ESP使用巴法云远程OTA&#xff08;Platform&#xff09; 什么是OTA&#xff1a; OTA&#xff08;Over-the-AirTechnology&#xff09;即空中下载技术&#xff0c;是通过移动通信的空中接口实现对移动终端设备及SIM卡数据进行远程管理的技术。OTA升级是物联网&#xff08;IOT&am…

[深度学习]yolov10+deepsort+pyqt5实现目标追踪

YOLOv10DeepSORTPyQt5实现目标追踪系统 在现代智能监控系统中&#xff0c;目标追踪技术扮演着至关重要的角色。结合YOLOv10&#xff08;一种先进的实时目标检测算法&#xff09;与DeepSORT&#xff08;一种多目标追踪算法&#xff09;&#xff0c;并通过PyQt5构建用户界面&…

想要做好海外广告投放?建议这几点先了解清楚

在全球市场竞争日益激烈的今天&#xff0c;跨境电商和出海营销早已经成为了热门选择&#xff0c;随之而来海外广告的投放也受到众多人的青睐。无论是想要提升品牌知名度&#xff0c;还是实现销售增长&#xff0c;正确的广告投放都能事半功倍。错误的选择不仅浪费资源&#xff0…

【Qt秘籍】[006]-Label实现Hello World程序-编程第一步

"Hello,World!" 中文意思是“你好&#xff0c;世界”。 因为 The C Programming Language 中使用它做为第一个演示程序&#xff0c;后来很多程序员在学习编程或进行设备调试时延续了这一习惯。 下面&#xff0c;我们也将演示利用Label显示Qt中的"Hello World!&q…

深度学习笔记:0.cuda安装,成功

B站上说&#xff1a;cs上骗子太多。文章太久&#xff0c;我深以为然。用了一天。才装好。其实很简单。 CUDA安装教程&#xff08;超详细&#xff09;-CSDN博客文章浏览阅读1w次&#xff0c;点赞5次&#xff0c;收藏56次。windows10 版本安装 CUDA &#xff0c;首先需要下载两个…

秋招突击——第四弹——Java的SSN框架快速入门——Spring(2)

文章目录 前言其他Spring加载properties 容器创建容器获取beanBeanFactory容器总结 注解注解开发对定义bean纯注解开发Bean管理Bean作用范围Bean生命周期 注解开发依赖注入第三方bean管理第三方bean管理第三方bean注入 注解开发总结 Spring整合整合mybatis整合Junit AOPAOP核心…

Mybatis实现树形结构方式

1&#xff0c;三级分类树形结构查询 /*** DDD(Domain-Driven Design): 领域驱动设计** 三级分类树形结构&#xff1b;* 支持无限层级&#xff1b;* 当前项目只有三级*/ Data public class CategoryTreeTo {private Long categoryId; //1private String categoryName;private …

外观数列 ---- 模拟

题目链接 题目: 分析: 题目的意思如下:所以我们需要引用双指针来找到连续的字符有几个, 并添加到答案中, 接着将此字符添加到答案中, 让left right , 继续向后遍历整个字符串, 重复上面的操作将答案重新赋给字符串, 继续重复上述操作, 应该重复n - 1 次, 因为n为1的时候, 直…

上网是不是必须路由器和光猫之一负责拨号?

链接&#xff1a;https://www.zhihu.com/question/624856022/answer/3245182557 上网并非一定要“拨号”&#xff0c;使用固定IP地址可以直接上网&#xff0c;不需要拨号。你们公司的宽带属于商用宽带&#xff0c;运营商&#xff08;电信&#xff09;给配置了固定的IP&#…

如何监控企业微信聊天记录内容,第二个方法太赞了!

监控企业微信聊天记录内容是企业为了确保沟通合规、提升工作效率、防止信息泄露以及保护公司利益而采取的一种管理措施。在当前的中国&#xff0c;是法律允许的合法行为。 怎么监控&#xff1f;请看下面详情。 1. 利用企业微信自带功能 企业会话存档&#xff1a; 企业微信提…