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

2024-06-01 20:28

本文主要是介绍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 deepcopyclass 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_dictself.page_param = page_param# 分页page = request.GET.get(page_param, "1")  # 当前所在的页面# 判断字符创当中全部都是数字if page.isdecimal():page = int(page)else:page = 1self.page = pageself.start = (page - 1) * page_sizeself.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 += 1self.page_count = page_countself.plus = plusdef page_html(self):if self.page_count <= 2 * self.plus + 1:start_page = 1end_page = self.page_countelse:# 当前选中的页数小于等于三if self.page <= self.plus:start_page = 1end_page = 2 * self.plus + 1else:# 当前页 + 2if (self.page + self.plus) > self.page_count:start_page = self.page_count - self.plus * 2end_page = self.page_countelse:start_page = self.page - self.plusend_page = self.page + self.pluspage_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_dictself.page_param = page_param# 分页page = request.GET.get(page_param, "1")  # 当前所在的页面# 判断字符创当中全部都是数字if page.isdecimal():page = int(page)else:page = 1
    ​self.page = pageself.start = (page - 1) * page_sizeself.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 += 1self.page_count = page_countself.plus = plus
    ​def page_html(self):if self.page_count <= 2 * self.plus + 1:start_page = 1end_page = self.page_countelse:# 当前选中的页数小于等于三if self.page <= self.plus:start_page = 1end_page = 2 * self.plus + 1else:# 当前页 + 2if (self.page + self.plus) > self.page_count:start_page = self.page_count - self.plus * 2end_page = self.page_countelse:start_page = self.page - self.plusend_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=100print(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_dictself.page_param = page_param# 分页page = request.GET.get(page_param, "1")  # 当前所在的页面# 判断字符创当中全部都是数字if page.isdecimal():page = int(page)else:page = 1
    ​self.page = pageself.start = (page - 1) * page_sizeself.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 += 1self.page_count = page_countself.plus = plus
    ​def page_html(self):if self.page_count <= 2 * self.plus + 1:start_page = 1end_page = self.page_countelse:# 当前选中的页数小于等于三if self.page <= self.plus:start_page = 1end_page = 2 * self.plus + 1else:# 当前页 + 2if (self.page + self.plus) > self.page_count:start_page = self.page_count - self.plus * 2end_page = self.page_countelse:start_page = self.page - self.plusend_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

这篇关于6-Django项目--分页模块化封装参数共存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

eclipse如何运行springboot项目

《eclipse如何运行springboot项目》:本文主要介绍eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目js录当在eclipse启动spring boot项目时出现问题解决办法1.通过cmd命令行2.在ecl

如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-

SpringBoot项目Web拦截器使用的多种方式

《SpringBoot项目Web拦截器使用的多种方式》在SpringBoot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制,下面给大家介绍Sprin... 目录一、实现 HandlerInterceptor 接口1、创建HandlerInterceptor实

Maven项目打包时添加本地Jar包的操作步骤

《Maven项目打包时添加本地Jar包的操作步骤》在Maven项目开发中,我们经常会遇到需要引入本地Jar包的场景,比如使用未发布到中央仓库的第三方库或者处理版本冲突的依赖项,本文将详细介绍如何通过M... 目录一、适用场景说明​二、核心操作命令​1. 命令格式解析​2. 实战案例演示​三、项目配置步骤​1

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

Spring 缓存在项目中的使用详解

《Spring缓存在项目中的使用详解》Spring缓存机制,Cache接口为缓存的组件规范定义,包扩缓存的各种操作(添加缓存、删除缓存、修改缓存等),本文给大家介绍Spring缓存在项目中的使用... 目录1.Spring 缓存机制介绍2.Spring 缓存用到的概念Ⅰ.两个接口Ⅱ.三个注解(方法层次)Ⅲ.

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red