前端直接把对应代码加入对应表单就可以实现表单的分页和跳转表单 table classtable idtaskTable thead tr thID/th th任务详情/th th任务级别/th th执行人/th th操作/th /tr /thead tbody {% for itm in page_obj %} tr td{{ itm.id }}/td td{{ itm.content }}/td td{{ itm.get_lever_display }}/td td{{ itm.user.username|default:未分配 }}/td td input classbtn btn-primary btn-xs btn-edit typebutton value编辑 >script // 页码跳转 function jumpToPage() { const input document.getElementById(jumpPageInput); const maxPage {{ page_obj.paginator.num_pages }}; // Django 注入总页数 let page parseInt(input.value, 10); // 完善的输入校验 if (isNaN(page) || page 1) page 1; if (page maxPage) page maxPage; if (page {{ page_obj.number }}) return; // 当前页不重复刷新 // URLSearchParams 自动保留所有现有参数安全替换 page updateUrlAndGo({ page: page }); } // 回车跳转 document.getElementById(pageInput).addEventListener(keypress, function (e) { if (e.key Enter) { jumpToPage(); } }); /** * 统一处理 URL 参数跳转 * 原理读取当前 URL 中的所有参数keyword, lever, executor, page_size 等 * 仅覆盖传入的新参数其余原封不动保留彻底杜绝参数丢失。 */ function updateUrlAndGo(paramsObj) { const params new URLSearchParams(window.location.search); for (const [key, value] of Object.entries(paramsObj)) { if (value || value null || value undefined) { params.delete(key); } else { params.set(key, value); } } window.location.href ? params.toString(); } // 【重要】拦截搜索表单提交强制重置到第1页 // 防止用户在第5页搜索新关键词时因结果不足5页而显示空白 document.querySelector(form[methodget]).addEventListener(submit, function(e) { e.preventDefault(); const formData new FormData(this); const params new URLSearchParams(); for (const [key, value] of formData.entries()) { if (value ! ) params.set(key, value); } params.set(page, 1); // 搜索时始终回到第一页 window.location.href ? params.toString(); }); // 拦截搜索表单提交强制重置到第1页 const searchForm document.querySelector(form[methodget]); if (searchForm) { searchForm.addEventListener(submit, function(e) { e.preventDefault(); const formData new FormData(this); const params new URLSearchParams(); for (const [key, value] of formData.entries()) { if (value ! ) params.set(key, value); } params.set(page, 1); window.location.href ? params.toString(); }); } /scriptCSS:style /* 遮罩全屏 flex 居中 */ .modal-mask { display: none; /* 默认隐藏 */ position: fixed; /* 固定定位不随页面滚动 */ top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); z-index: 999; /* 居中全靠这三行 */ justify-content: center; /* 水平居中 */ align-items: center; /* 垂直居中 */ } /* 显示状态注意是 flex不是 block */ .modal-mask.show { display: flex; } /* 弹窗白框不需要 position、top、transform */ .modal-box { background: #fff; width: 420px; max-height: 90vh; /* 内容太多时不超出屏幕 */ overflow-y: auto; padding: 20px; border-radius: 8px; } .modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; } .modal-footer { text-align: right; margin-top: 15px; } /* 外层容器 */ .pagination-bar { display: flex; align-items: center; gap: 8px; margin-top: 20px; flex-wrap: wrap; } /* 翻页按钮通用 */ .page-btn { padding: 5px 10px; border: 1px solid #ddd; text-decoration: none; color: #333; border-radius: 3px; font-size: 14px; white-space: nowrap; } .page-btn:hover:not(.disabled) { background-color: #f5f5f5; border-color: #ccc; } /* 禁用状态 */ .page-btn.disabled { border-color: #eee; color: #ccc; cursor: not-allowed; } /* 页码信息文本 */ .page-info { padding: 5px 10px; color: #333; font-size: 14px; white-space: nowrap; } /* 功能分组间距 */ .page-size-group, .jump-group { display: flex; align-items: center; gap: 4px; margin-left: 8px; } /* 标签文字 */ .label-text { font-size: 14px; color: #666; white-space: nowrap; } /* 每页条数下拉框 */ .page-select { padding: 5px 10px; border: 1px solid #ccc; border-radius: 4px; font-size: 14px; } /* 跳转输入框 */ .jump-input { width: 60px; padding: 4px 8px; border: 1px solid #ddd; border-radius: 3px; text-align: center; font-size: 14px; } /* 去除 number 输入框的上下箭头可选 */ .jump-input::-webkit-inner-spin-button, .jump-input::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; } .jump-input { -moz-appearance: textfield; } /* GO 按钮 */ .jump-btn { padding: 4px 12px; border: 1px solid #ddd; background: #fff; border-radius: 3px; cursor: pointer; font-size: 14px; color: #333; } .jump-btn:hover { background-color: #f5f5f5; border-color: #ccc; } /style后端def task_list(request): form TaskModelForm() # 获取搜索参数 keyword request.GET.get(keyword, ).strip() lever request.GET.get(lever, ) executor request.GET.get(executor, ) # 动态构建过滤条件 condition {} if keyword: condition[content__icontains] keyword if lever: condition[lever] lever if executor: condition[user_id] executor queryset models.Task.objects.select_related(user).filter(**condition).order_by(-id) # 分页 page_size int(request.GET.get(page_size, 5)) paginator Paginator(queryset, page_size) pagenumber request.GET.get(page, 1) page_obj paginator.get_page(pagenumber) # 新增从数据库动态获取级别和执行人列表 # 假设级别存在 Levers 模型中或者 Task 模型有 lever 外键 levers models.Task.lever_choices executors models.Admin.objects.all() # 根据你的实际执行人模型名调整 context { form: form, page_obj: page_obj, page_size: page_size, keyword: keyword, lever: lever, executor: executor, levers: levers, # 级别列表 executors: executors, # 执行人列表 page_size_options: [5, 10, 20, 50], } return render(request, task_list.html, context)
企业数字化 ERP 产品动态
相关推荐
交警手势识别:小样本+强约束下的工业级落地实践 简介:本资源是一套基于Python与PyTorch框架实现的中国交通警察指挥手势识别系统,面向计算机视觉初学者、本科毕业设计及课程设计学生,解决交通场景下非接触式手势语义理解的实际问题。项目包含完整训练流程、推理部署代码与自建标注数据集&am… · 2026/9/24 18:41:28
TRAE与VSCode中的Git版本管理实战:从配置到AI辅助提效 直接在TRAE和VSCode里把Git玩明白,真的能省下大量重复劳动。最近不少朋友在从传统IDE迁到AI编辑器,问得最多的就是版本管理怎么做。今天我把在TRAE、VSCode上做Git管理的完整思路、操作细节和踩坑记录都整理出来,从环境搭建讲到底层命令逻辑&… · 2026/9/24 18:41:28
MXNet训练加速实战:从数据管道到混合精度与KVStore调优 那阵子我在调一个图像分类模型,batch size 已经拉得很高,GPU 利用率却像心电图一样上下乱跳。起初怀疑是卡的问题,后来把 MXNet 模型训练里的数据管道、hybridize 机制、混合精度和 KVStore 设置逐层排查了一遍,训练总时长才真正压… · 2026/9/24 18:41:27
FineReport到期换新?2026年报表迁移替代方案与校验指南 2026年刚过完春节,我这边已经接到三四家企业客户在问同一件事:FineReport到期了,续费太贵,还有没有其他出路?其实这个问题前两年就陆续有人问,但今年明显频率上来了——有些是采购政策调整,有些… · 2026/9/24 19:10:20
FineReport替代与迁移校验实战指南 FineReport在报表圈里的地位,不需要我多吹。做企业信息化的这十几年,我经手过的财务、人力、运营、供应链项目里,少说也有几十个项目是用FineReport撑着报表体系的。类Excel的设计器、各种复杂报表、填报、大屏,都是它的看家本领。… · 2026/9/24 19:10:20
知网AIGC检测原理与手动降AI率实操攻略 先说一个我亲眼见过的案例。去年帮一个学弟改毕业论文,他一稿写得非常"顺",顺到查重率只有8%,送审前学院统一做了AIGC检测,结果出来,疑似AI生成占比43%,差点没赶上送审窗口。那几天我陪着他一版一… · 2026/9/24 19:10:20
基于OpenCV的指针仪表盘读数识别:从角度换算法到霍夫直线检测 简介:这是一份基于OpenCV的仪表盘指针读数识别系统源码,以C实现,适合学习计算机视觉的开发者、相关课题学生或工程技术人员参考。系统包含低精度与高精度两套实现方案,通过图像预处理、指针检测与角度换算等步骤完成读数识别&… · 2026/9/24 19:10:20
YOLO小样本数据增强:图片与标注同步扩充实战 简介:针对YOLO目标检测在小样本图像数据集上训练容易过拟合的问题,这份资源整理了系统的数据集扩充方法,面向算法工程师、计算机视觉学习者以及需要优化检测效果的开发者。压缩包共2个文件,含1个Markdown说明文档和1个Python脚本&… · 2026/9/24 19:10:20
Word样式完美迁移到Web编辑器:从docx解析到HTML重建的完整指南 “这文档我花了两小时排好的,怎么贴到你们编辑器里全乱了?”这句话我听到的版本大概有几十个了。每个做在线文档、CMS、知识库的团队,几乎都逃不过这个场景:运营同事精心用Word排好的内容,一旦要发布到Web端࿰… · 2026/9/24 19:10:14
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44