5-Django项目--分页与搜索(资产页面)

目录

views/asset_data.py

asset_data/asset_data.html

搜索与分页笔记:

搜索

整数搜索

字符串搜索

分页


views/asset_data.py

# -*- coding:utf-8 -*-
from django.shortcuts import render, redirect, HttpResponse
from django.utils.safestring import mark_safe
from demo_one import models
from django import forms
import random
# 正则校验
from django.core.validators import RegexValidator
# 异常类
from django.core.exceptions import ValidationError# 资产信息展示
def asset_data(request):# 直接写入列表数据data_time = ["2024-5-14", "2024-5-13", "2024-5-12", "2024-5-11", "2024-5-10", "2024-5-18"]name_list = ["一灯大师", "马青雄", "马钰", "小沙弥", "木华黎", "丘处机", "沈青刚","书生", "天竺僧人", "王处一", "王罕", "尹志平", "包惜弱", "冯衡","孙不二", "札木合", "华筝", "李萍", "刘玄处", "刘瑛姑", "吕文德","乔寨主", "曲三", "曲傻姑", "全金发", "汤祖德", "朱聪", "陈玄风","灵智上人", "陆乘风", "陆冠英", "沙通天", "完颜洪烈", "完颜洪熙", "吴青烈","杨铁心", "余兆兴", "张阿生", "张十五", "忽都虎", "欧阳峰", "欧阳克","者勒米", "周伯通", "段天德", "郭靖", "郭啸天", "郝大通", "洪七公","姜文", "柯镇恶", "枯木", "南希仁", "胖妇人", "胖丐", "胖子","都史", "钱青健", "桑昆", "铁木真", "盖运聪", "黄蓉", "黄药师","梁子翁", "梅超风", "渔人", "博尔忽", "博尔术", "程瑶迦", "韩宝驹","焦木和尚", "鲁有脚", "穆念慈", "彭长老", "彭连虎", "童子", "窝阔台","简管家", "裘千仞", "裘千丈", "瘦丐", "察合台", "酸儒文人", "谭处端", ]for name in name_list:number = str(name_list.index(name) + 1)if len(number) <= 1:number = "2024" + "00" + number# models.Asset.objects.create(name=name, mobile=f"153{random.randint(11111111, 99999999)}",#                             data_time=random.choice(data_time), data_id=number)elif len(number) <= 2:number = "2024" + "0" + number# models.Asset.objects.create(name=name, mobile=f"153{random.randint(11111111, 99999999)}",#                             data_time=random.choice(data_time), data_id=number)else:number = "2024" + number# models.Asset.objects.create(name=name, mobile=f"153{random.randint(11111111, 99999999)}",#                             data_time=random.choice(data_time), data_id=number)# data_list = models.Asset.objects.filter(data_id__contains="00")# 搜索dict_data = {}# 获取搜索框当中的内容value = request.GET.get("search")# 如果value有值,则进行搜索,没有值,全部展示if value:# 字典的键是查询条件,值是查询的内容dict_data["data_id__contains"] = value# print(data_list)# 分页page = int(request.GET.get("page", 1))  # 当前所在的页面page_size = 10  # 每页展示十条信息# 寻找切片的开始和结束start = (page-1) * page_sizeend = page * page_size# 字典当中如果有条件,则根据条件进行查询,如果是空,则查询全部,最终返回列表格式data_list = models.Asset.objects.filter(**dict_data)[start:end]# 查询总共有多少条数据data_asset_count = models.Asset.objects.filter(**dict_data).count()# 总数除以10,如果有余数,则单独添加一页page_count, div = divmod(data_asset_count, page_size)if div:page_count += 1# 见算出当前页的前两页和后两页plus = 2# 如果当前数据表的总页码小于 5页if page_count <= 2*plus + 1:start_page = 1end_page = page_countelse:# 当前选中的页数小于等于三if page <= plus:start_page = 1end_page = 2 * plus + 1else:# 当前页 + 2if(page + plus) > page_count:start_page = page_count - plus * 2end_page = page_countelse:start_page = page - plusend_page = page + plus# 存放分页的li标签page_str_list = []# 首页page_str_list.append(f'<li><a href="?page=1" aria-label="Previous"><span aria-hidden="true">首页</span></a></li>')# 上一页if page > 1:page_str_list.append(f'<li><a href="?page={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 == 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 page < page_count:page_str_list.append(f'<li><a href="?page={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={page_count}" aria-label="Previous"><span aria-hidden="true">尾页</span></a></li>')# 将列表当中的字符串传递给html,并且一标签的形式展示page_string = mark_safe("".join(page_str_list))return render(request, "asset_data/asset_data.html", {"data_list": data_list,"page_string": page_string})# 添加资产
class Addasset(forms.ModelForm):# 创建一个手机号输入框,校验手机号的格式mobile = forms.CharField(label="手机号",validators=[RegexValidator(r"^1[3-9]\d{9}$", "请输入正确格式的手机号")])class Meta:model = models.Assetfields = ["name", "mobile", "data_time", "data_id", "ret_data"]# 排除某些字段# exclude = ["name"]def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():field.widget.attrs = {"class": "form-control", "autocomplete": "off"}# 数据库做重复值判断 clean_字段(self)def clean_data_id(self):# 获取页面input框输入的资产编号data_id_txt = self.cleaned_data["data_id"]# 进入数据库,判断输入的资产编号是否存在# .exists() filter条件满足,则返回Trueexists = models.Asset.objects.filter(data_id=data_id_txt).exists()if exists:raise ValidationError("该资产已经被借用")# 如果资产编号不在数据库,则返回编号return data_id_txt# 增加资产信息
def add_asset(request):title = "添加资产"if request.method == "GET":form = Addasset()return render(request, "asset_data/add_modify.html", {"title": title, "form": form})form = Addasset(data=request.POST)if form.is_valid():form.save()return redirect("/asset/data/")return render(request, "asset_data/add_modify.html", {"title": title, "form": form})class Modifyasset(forms.ModelForm):data_time = forms.CharField(disabled=True, label="借用时间")class Meta:model = models.Assetfields = "__all__"def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():field.widget.attrs = {"class": "form-control", "autocomplete": "off"}def clean_data_id(self):# 获取页面input框输入的资产编号data_id_txt = self.cleaned_data["data_id"]# 进入数据库,判断输入的资产编号是否存在# .exists() filter条件满足,则返回True# exclude(id=self.instance.pk) 忽略当前字段,你某个值的验证exists = models.Asset.objects.exclude(id=self.instance.pk).filter(data_id=data_id_txt).exists()if exists:raise ValidationError("该资产已经被借用,请重新修改")# 如果资产编号不在数据库,则返回编号return data_id_txt# 修改信息
def modify_asset(request, nid):title = "编辑资产信息"data_obj = models.Asset.objects.filter(id=nid).first()if request.method == "GET":form = Modifyasset(instance=data_obj)return render(request, "asset_data/add_modify.html", {"title": title, "form": form})form = Modifyasset(data=request.POST, instance=data_obj)if form.is_valid():form.save()return redirect("/asset/data/")return render(request, "asset_data/add_modify.html", {"title": title, "form": form})# 删除操作
def delete_asset(request, nid):models.Asset.objects.filter(id=nid).delete()return redirect("/asset/data/")

asset_data/asset_data.html

{% extends "index/index.html" %}{% block content %}<div class="container"><div style="margin-bottom: 10px"><a class="btn btn-success" href="/add/asset/"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span>添加资产</a><div style="float: right;width: 300px"><form method="get"><div class="input-group"><input type="text" class="form-control" placeholder="请输入资产编号" name="search"><span class="input-group-btn"><button class="btn btn-default" type="submit">Go!</button></span></div></form></div></div><div class="panel panel-warning"><div class="panel-heading"><h3 class="panel-title">资产表</h3></div><div class="panel-body"><table class="table"><thead><tr><th>id</th><th>姓名</th><th>电话</th><th>借用日期</th><th>资产编号</th><th>归还状态</th><th>操作</th></tr></thead><tbody>{% for data in data_list %}<tr><th>{{ data.id }}</th><td>{{ data.name }}</td><td>{{ data.mobile }}</td><td>{{ data.data_time }}</td><td>{{ data.data_id }}</td>{% if data.ret_data == 1 %}<td style="color: green">{{ data.get_ret_data_display }}</td>{% else %}<td style="color: red">{{ data.get_ret_data_display }}</td>{% endif %}<td><a href="/modify/{{ data.id}}/asset/"><span style="color: green" class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a><a href="/delete/{{ data.id}}/asset/"><span style="color: red" class="glyphicon glyphicon-trash" aria-hidden="true"></span></a></td></tr>{% endfor %}</tbody></table></div></div><ul class="pagination">{{ page_string }}</ul></div>
{% endblock %}

搜索与分页笔记:

搜索

models.Asset.objects.filter(name="Sakura",id=1)
  • 整数搜索

    # 搜索id为1的数据
    models.Asset.objects.filter(id=1)
    ​
    # 搜索id大于1的数据
    models.Asset.objects.filter(id__gt=1)
    ​
    # 搜索id大于等于1的数据
    models.Asset.objects.filter(id__gte=1)
    ​
    # 搜索id小于1的数据
    models.Asset.objects.filter(id__lt=1)
    ​
    # 搜索id小于等于1的数据
    models.Asset.objects.filter(id__lte=1)
  • 字符串搜索

    # 包含在内
    models.Asset.objects.filter(data_id__contains="2024")
    # 搜索开头
    models.Asset.objects.filter(data_id__startswidth="2024")
    # 搜索结尾
    models.Asset.objects.filter(data_id__endswidth="2024")

分页

1、每一页展示10条数据models.Asset.objects.filter(**dict_data)[0~9]    第一页models.Asset.objects.filter(**dict_data)[10~19]  第二页models.Asset.objects.filter(**dict_data)[20~29]  第一页
2、计算数据表总共有多少条数据:page = 500 / 10   (50页)page = 501 / 10   (51页)
3、页面只展示五个li标签如果在第一页, 则展示1,2,3,4,5如果在第三页, 则展示1,2,3,4,5如果在第四页, 则展示2,3,4,5,6如果总页数小于5页开始页 1结束页  总页数否则如果当前选择的是第一页或者第二页开始页=1结束页=5如果总共有20页16,17,18,19,20否则,在其他页面比如点到了第九页开始页 = page - plue结束页 = page + plue

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

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

相关文章

电子元器件采购商城的售后服务保障

电子元器件采购商城的售后服务保障是用户在采购电子元器件时的重要考量因素之一。以下是常见的售后服务保障内容&#xff1a; 退换货政策&#xff1a; 质量问题退换货&#xff1a;如果用户收到的元器件存在质量问题&#xff0c;通常可以在一定时间内申请退换货。无理由退换货&a…

数据分析第一天(pandas简单的对快餐店数据进行操作获得想要的信息,使用apply,groupby)

前言 数据保存在 https://github.com/harkbox/DataAnalyseStudy 数据名称&#xff1a;快餐数据.tsv &#xff08;tsv是用\t作为字符分隔符的文件格式&#xff1b;csv是逗号&#xff09; 因此可以用pandas的read_csv函数读取数据 1.读取数据 import pandas as pd import matp…

PCA算法

PCA算法 原创 小王搬运工 时序课堂 2024-06-06 19:16 四川 1. PCA算法 PCA算法称为主成分分析&#xff0c;是一种无监督学习算法&#xff0c;主要用于数据降维和特征提取。 PCA是一种数据降维模型&#xff0c;它的基本模型是通过线性变换将数据转换到新的空间&#xff0c;这…

windows架设NTP时间服务器进行时间同步

一、windows架设NTP时间服务器 1.win11更改注册表 winR输入regedit 2.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config&#xff0c;找到Config目录&#xff0c;双击Config目录下的AnnounceFlags&#xff0c;设为5。 3.HKEY_LOCAL_MACHINE\SYSTEM\Current…

【养老政策问答】银发经济你怎么看?

概述 养老政策问答是一个专门为老年人设计的一站式问答服务平台。该应用旨在为用户提供关于养老政策的全面信息和专业解答&#xff0c;帮助老年人理解和获取相关政策的详细内容&#xff0c;享受无忧的老年生活。用户可以通过此应用获取关于基本养老保险、养老保险的缴费与领取…

第二十六章CSS3续~

3.CSS3渐变属性 CSS3渐变(gradients)可以在两个或多个指定的颜色之间显示平稳的过渡。 以前&#xff0c;我们必须使用图像来实现这些效果。但是&#xff0c;通过使用CSS3渐变(gradients)&#xff0c;可以减少下载的事件和宽带的使用。由于渐变(gradient)是由浏览器生成的&…

YOLOv3深入解析与实战:实时目标检测的高效多尺度架构网络

参考&#xff1a; https://arxiv.org/pdf/1804.02767.pdf https://blog.csdn.net/weixin_43334693/article/details/129143961 网上有很多关于yolo的文章&#xff0c;有些东西没讲清楚&#xff0c;基于自己对论文的理解&#xff0c;也做一个按照自己的想法做的理解。 1. 预测…

神经网络 torch.nn---损失函数与反向传播

torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) torch.nn — PyTorch 2.3 documentation Loss Function的作用 每次训练神经网络的时候都会有一个目标&#xff0c;也会有一个输出。目标和输出之间的误差&#xff0c;就是用Loss Function来衡量的。所以&#xff0c;…

Qt图像处理技术十一:得到QImage图像的马赛克图像

效果图 指数5 指数15 指数40 原理 马赛克的原理很简单&#xff0c;就是取一个值&#xff0c;让这个值作为一个方格子的长宽&#xff0c;如40*40px的格子&#xff0c;取这个区域的平均R G B值&#xff0c;然后这个区域的所有像素点都是这个RGB值即可 源码 QImage applyM…

力扣2968.执行操作使频率分数最大

力扣2968.执行操作使频率分数最大 方法一&#xff1a;滑窗 前缀和 求前缀和数组s 求一个数组补齐到中位数的差值 枚举右端点 class Solution {public:int maxFrequencyScore(vector<int>& nums, long long k) {int res0,n nums.size();sort(nums.begin(),nums…

27-unittest之断言(assert)

在测试方法中需要判断结果是pass还是fail&#xff0c;自动化测试脚本里面一般把这种生成测试结果的方法称为断言&#xff08;assert&#xff09;。 使用unittest测试框架时&#xff0c;有很多的断言方法&#xff0c;下面介绍几种常用的断言方法&#xff1a;assertEqual、assert…

Vue可视化表单设计 FcDesigner v3.1.0 发布,新增 12 个组件,支持事件配置等

FcDesigner 是一款可视化表单设计器组件。可以通过拖拽的方式快速创建表单&#xff0c;提高开发者对表单的开发效率&#xff0c;节省开发者的时间。 本项目采用 Vue 和 ElementPlus 进行页面构建&#xff0c;内置多语言解决方案&#xff0c;支持二次扩展开发&#xff0c;支持自…

【cmake】cmake cache

cmake cache是什么 cmake cache是cmake在配置好后生成的一个CMakeCache.txt的文件&#xff0c;里面存储了一堆变量&#xff0c;这些变量一般都是关于项目的配置和环境的。 比如你用的什么编译器&#xff0c;编译器选项&#xff0c;还有项目目录。 例如&#xff08;在cmakelist…

前端工程化工具系列(九)—— mddir(v1.1.1):自动生成文件目录结构工具

mddir 是一个基于项目目录结构动态生成 Markdown 格式目录结构的工具&#xff0c;方便开发者在文档中展示文件和文件夹的组织结构。 1. 安装 全局安装改工具&#xff0c;方便用于各个项目。 pnpm i -g mddir2. 使用 在想要生成目录接口的项目内打开命令行工具&#xff0c;输…

太阳能航空障碍灯在航空安全发挥什么作用_鼎跃安全

随着我国经济的快速发展&#xff0c;空域已经成为经济发展的重要领域。航空运输、空中旅游、无人机物流、飞行汽车等经济活动为空域经济发展提供了巨大潜力。然而&#xff0c;空域安全作为空域经济发展的关键因素&#xff0c;受到了广泛关注。 随着空域经济活动的多样化和密集…

Waymo视角革新!MoST:编码视觉世界,刷新轨迹预测SOTA!

论文标题&#xff1a; MoST: Multi-modality Scene Tokenization for Motion Prediction 论文作者&#xff1a; Norman Mu, Jingwei Ji, Zhenpei Yang, Nate Harada, Haotian Tang, Kan Chen, Charles R. Qi, Runzhou Ge, Kratarth Goel, Zoey Yang, Scott Ettinger, Rami A…

锁存器(Latch)的产生与特点

Latch 是什么 Latch 其实就是锁存器&#xff0c;是一种在异步电路系统中&#xff0c;对输入信号电平敏感的单元&#xff0c;用来存储信息。锁存器在数据未锁存时&#xff0c;输出端的信号随输入信号变化&#xff0c;就像信号通过一个缓冲器&#xff0c;一旦锁存信号有效&#…

深入解析Java中volatile关键字

前言 我们都听说过volatile关键字&#xff0c;也许大家都知道它在Java多线程编程编程中可以减少很多的线程安全问题&#xff0c;但是会用或者用好volatile关键字的开发者可能少之又少&#xff0c;包括我自己。通常在遇到同步问题时&#xff0c;首先想到的一定是加锁&#xff0…

移动web性能测试工具有哪些呢?

摘要&#xff1a;本文将介绍一系列移动Web性能测试工具&#xff0c;以帮助开发人员评估和优化移动网站和应用程序的性能。我们将从基本概念开始&#xff0c;逐步深入&#xff0c;详细介绍每种工具的特点、用途和使用方法。 1. 概述 1.1 移动Web性能测试的重要性 1.2 测试工具…

微信小程序-wx.showToast超长文字展示不全

wx.showToast超长文字展示不全 问题解决方法1 问题 根据官方文档&#xff0c;iconnone&#xff0c;最多显示两行文字。所以如果提示信息较多&#xff0c;超过两行&#xff0c;就需要用其他方式解决。 解决方法1 使用vant组件里面的tost 根据官方例子使用&#xff1a; 1、在…