学生管理之原生分页方法
作者:@skyflask
转载本文请注明出处:https://www.cnblogs.com/skyflask/p/9601182.html
目录
原生分页方法
1、分页方法
2、views.py
3、html文件
4、效果图
原生分页方法
1、分页方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #coding:utf-8 #__author: Administrator #date: 2016/12/7 class PagerHelper: def __init__(self,total_count,current_page,base_url,per_page=10): self.total_count = total_count self.current_page = current_page self.base_url = base_url self.per_page = per_page ''' [1,10] [11,20] [21.30] ..... [981,990] [991,999] 每页10条记录,divmod(总记录数,10)计算出页数和剩余记录数。 比如:999条记录,则可分100页:99页每页10条,最后一页9条记录。 1000条记录,则分为100页,每页10条。 < a >href=class.html?p=1</ a > 获取对应页的记录 ''' #获取每页的起始页 @property def db_start(self): return (self.current_page -1) * self.per_page #获取每页的末尾页 @property def db_end(self): return self.current_page * self.per_page #获取总页数 def total_page(self): v, a = divmod(self.total_count, self.per_page) if a != 0: v += 1 return v def pager_str(self): #获取总页码 v = self.total_page() pager_list = [] pager_list.append('< a href="%s?p=%s">首页</ a >' % (self.base_url, 1)) #如果是第一页,则不能再点击上一页了 if self.current_page == 1: pager_list.append('< a href="javascript:void(0);">上一页</ a >') #如果不是第一页,则上一页就是current_page-1 else: pager_list.append('< a href="%s?p=%s">上一页</ a >' % (self.base_url, self.current_page - 1,)) # 6,1:12 # 7,2:13 #如果total页数小于等于11,则起始页为1,结束页为total if v <= 11: pager_range_start = 1 pager_range_end = v #如果total页数大于11 # 如果当前页小于6,则起始页为1,结束页为11 # 如果当前页大于6,则起始页为当前页-5,结束页为当前页+5+1 # 如果此时结束页超出了总页数,则起始页为总页数-10,结束页为总页数+1 else: if self.current_page < 6: pager_range_start = 1 pager_range_end = 11 + 1 else: pager_range_start = self.current_page - 5 pager_range_end = self.current_page + 5 + 1 if pager_range_end > v: pager_range_start = v - 10 pager_range_end = v + 1 #生成每一页的a标签连接 for i in range(pager_range_start, pager_range_end): if i == self.current_page: pager_list.append('< a class="active" href="%s?p=%s">%s</ a >' % (self.base_url, i, i,)) else: pager_list.append('< a href="%s?p=%s">%s</ a >' % (self.base_url, i, i,)) #如果当前页为末尾页,则为下一页,且无法点击;否则是可以点击的下一页 if self.current_page == v: pager_list.append('< a href="javascript:void(0);">下一页</ a >') else: pager_list.append('< a href="%s?p=%s">下一页</ a >' % (self.base_url, self.current_page + 1,)) pager_list.append('< a href="%s?p=%s">末页</ a >' % (self.base_url, v)) #将所有页面放入到一个字符串 pager = "".join(pager_list) return pager |
2、views.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | @auth def handle_classes(request): if request.method == "GET": #models.Classes.objects.create(caption='职业打酱油一班') #for i in range(1000): # models.Classes.objects.create(caption='职业打酱油'+str(i)+'班') # 当前页 current_page = request.GET.get('p',1) current_page = int(current_page) # 所有数据的个数 total_count = models.Classes.objects.all().count() from utils.page import PagerHelper obj = PagerHelper(total_count, current_page, '/classes.html',15) pager = obj.pager_str() cls_list = models.Classes.objects.all()[obj.db_start:obj.db_end] current_user = request.session.get('username') return render(request, 'classes.html', {'username': current_user, 'cls_list': cls_list, 'str_pager': pager}) |
3、html文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | < table border="1"> < thead > < tr > < th >ID</ th > < th >标题</ th > < th >操作</ th > </ tr > </ thead > < tbody > {% for item in cls_list %} < tr > < td alex="id">{{ item.id }}</ td > < td alex="caption">{{ item.caption }}</ td > < td > < a class="td-edit">编辑</ a >| < a target="_blank" href="/edit_classes.html?nid={{ item.id }}">跳转编辑</ a > | < a class="td-delete" href="/delete_classes.html?nid={{ item.id }}" onclick="return confirm('确定删除吗?');">删除</ a > </ td > </ tr > {% endfor %} </ tbody > </ table > < div class="pagination"> {{ str_pager|safe }} </ div > |
4、效果图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」