当前位置: 首页 > 后端技术 > Python

Django+Bootstrap封装页码组件

时间:2023-03-25 21:04:41 Python

效果展示,根据当前页码,前后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('

  • 首页
  • ')#上一页ifself.page>1:prev=f'
  • 上一页
  • 'else:prev=f'
  • 上一页
  • 'page_str_list.append(prev)foriinrange(start_page,end_page+1):ifi==self.page:ele=f'{i}'else:ele=f'
  • {i}
  • 'page_str_list.append(ele)#下一页ifself.page下一页'else:prev=f'
  • 下一页
  • 'page_str_list.append(prev)#最后一页page_str_list.append(f'
  • 最后一页
  • ')#输入页码跳转search_string="""jump
    """page_str_list.append(search_string)#转换为HTML元素page_string=mark_safe(''.join(page_str_list))returnpage_stringcallpagenumber:page_object=Pageination(request,queryset)context={'queryset':page_object.page_queryset,'search_data':search_data,#完成的数据'page_string'page:page_object.html(),#页码}returnrender(request,'pretty_list.html',context){{page_string}}