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

相关文章

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery