效果展示,根据当前页码,前后5页,有第一页和最后一页,上一页和下一页新建py文件:pageination.py"""自定义分页组件"""fromdjango.utils.safestringimportmark_safeclassPageination(object):""":paramrequest:请求的对象:paramqueryset:符合条件的数据(根据这个数据,对他进行分页处理):parampage_size:有多少每页显示几条数据:parampage_param:在url中传入的参数,获取分页,例如:/etty/list/?page=12:paramplus:显示的前一页或后一页(页码)当前页面"""def__init__(self,request,queryset,page_size=10,page_param='page',plus=5):page=request.GET.get('page',1)#判断是否是一个fullstringifpage.isdecimal():page=int(page)else:page=1#获取当前页self.page=page#每页显示的项目数self.page_size=page_size#起始页self.start=(page-1)*page_size#结束页self.end=page*page_sizeself.page_queryset=queryset[self.start:self.end]#总页数total_count=queryset.count()total_page_count,div=divmod(total_count,page_size)#获取除数和余数ifdiv:total_page_count+=1#总页数self.total_page_count=total_page_count#显示页数self.plus=plusdefhtml(self):#计算当前页的前5页和后5页ifself.total_page_count<=2*self.plus+1:start_page=1end_page=self.total_page_countelse:#里面还有更多的数据表数据空间>11ifself.page<=self.plus:start_page=1end_page=2*self.plus+1else:if(self.page+self.plus)>self.total_page_count:start_page=self.total_page_count-2*self.plusend_page=self.total_page_countelse:start_page=self.page-self.plusend_page=self.page+self.plus+1#生成页码page_str_list=[]#首页page_str_list.append('
