Django分页(二)
Django分页(二)
要求
# 1、设定每页显示数据条数 # # 2、用户输入页码(第一页、第二页...) # # 3、设定显示多少页号 # # 4、获取当前数据总条数 # # 5、根据设定显示多少页号和数据总条数计算出,总页数 # # 6、根据设定的每页显示条数和当前页码,计算出需要取数据表的起始位置 # # 7、在数据表中根据起始位置取值,页面上输出数据 # # 8、输出分页html,如:[上一页][1][2][3][4][5][下一页]
具体实现效果
css样式可以自行修改
示例
页面具体处理

# 参数: #数据总个数 #当前页 #每页显示多少条数据 #最多每页多个页号 class PageInfo(object): def __init__(self,totalCount,current,totalItem=12,peritems=10): #数据总个数 self._count=totalCount #当前页 try: v=int(current) if v<=0: v=1 self.__current=v except Exception as e: self.__current = 1 #每页显示的行数 self.__totalItem=totalItem #最多显示页面 self.__peritems = peritems #设置一页数据的开始和结束 #数据开始的页数 def start(self): return (self.__current-1)*self.__totalItem #数据结束的页数 def end(self): return self.__current*self.__totalItem #求出总页数 @property def num_pages(self): a,b=divmod(self._count,self.__totalItem) # print(a,b) if b==0: return a return a+1 #生成所有的页号 def page_num_range(self): # 当前页面 # self.current_page # 总页数 # self.num_pages # 最多显示的页码个数 # self.max_pager_num if self.num_pages < self.__peritems: return range(1, self.num_pages + 1) part = int( self.__peritems/ 2) if self.__current - part < 1: return range(1, self.__peritems + 1) if self.__current + part > self.num_pages: return range(self.num_pages + 1 - self.__peritems, self.num_pages + 1) return range(self.__current - part, self.__current + part + 1) #所有的a标签 def page_str(self): #用来存放所有页号a标签 page_list=[] #首页 head_page="<a href='/index3?p=1'>首页</a>" page_list.append(head_page) #上一页 print(self.__current) if self.__current ==1: prev="<a href='#'><<</a>" else: prev="<a href='/index3?p=%s'><<</a>"%(self.__current-1) page_list.append(prev) for i in self.page_num_range(): if i==self.__current: temp="<a style='font-size:30px;' href='/index3?p=%s'>%s</a>"%(i,i) else: temp="<a href='/index3?p=%s'>%s</a>"%(i,i) page_list.append(temp) #下一页 if self.__current==self.num_pages: next = "<a href='#'>>></a>" else: next = "<a href='/index3?p=%s'>>></a>" % (self.__current + 1) page_list.append(next) # 尾页 b_page="<a href='/index3?p=%s'>尾页</a>"%( self.num_pages) page_list.append(b_page) return ''.join(page_list)
视图函数

from django.shortcuts import render,HttpResponse,redirect from blog.models import * from blog import pager # Create your views here. USER_LIST=[] for i in range(666): temp={'name':'root'+str(i),'age':i} USER_LIST.append(temp) def get_index3(request): current_page=request.GET.get('p') #初始化页面处理的对象,有两个参数在初始化函数里,设置了默认数值 page_obj=pager.PageInfo(666,current_page) #对数据进行切片 data_list=USER_LIST[page_obj.start():page_obj.end()] return render(request,"index3.html",{'data_list':data_list,"page_obj":page_obj})
HTML
注意:safe在这里的作用。

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> a{ border-style: solid ; } </style> </head> <body> <div class="header"> <div> {% for user in data_list %} <li>{{ user.name }} {{ user.age }} </li> {% endfor %} <br> {{ page_obj.page_str | safe }} </div> </div> </body> </html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?