***自定义分页
路由分发(url):
from django.urls import path,include from Management.views import pagers urlpatterns = [ path('admin/', admin.site.urls), path('pager/', pagers.pager,name='pager'), ]
分页自定义类(Class.py):
''' TotalNumber:总个数 CurrentPage:当前页【1/2/3/4/5/6/7】 barsNumber:每页显示多少条【10条数据】 MaxPageNumber:最大显示多少个【1,2,3,4,5,6,7】 ''' class Pagination(object): def __init__(self,TotalNumber,CurrentPage,barsNumber=11,MaxPageNumber=7): self.Total_number=TotalNumber try: v = int(CurrentPage) if v<=0: v=1 self.Current_page=v except Exception as e: self.Current_page = 1 self.bars_number=barsNumber self.Max_pageNumber=MaxPageNumber def start(self): return (self.Current_page - 1) * self.bars_number def end(self): return self.Current_page * self.bars_number # 总页数 @property def num_pages(self): ''' 总页数 :return: ''' a,b = divmod(self.Total_number,self.bars_number) if b==0: return a else: return a+1 # 显示页码数 def page_num_range(self): #总页数小于显示页码 if self.num_pages < self.Max_pageNumber: return range(1,self.num_pages+1) #总页数很多 part = int(self.Max_pageNumber/2) if self.Current_page <= part: return range(1,self.Max_pageNumber+1) if (self.Current_page+part) > self.num_pages: return range(self.num_pages-self.Max_pageNumber,self.num_pages+1) return range(self.Current_page-part,self.Current_page+part+1) # 返回页码给前端 def page_str(self): page_list=[] # 首页 first="<li><a href='/pager/?p=1'>首页</a></li>" page_list.append(first) # 上一页 if self.Current_page ==1 : prev="<li><a href='#'>上一页</a></li>" else: prev="<li><a href='/pager/?p=%s'>上一页</a></li>" % (self.Current_page-1) page_list.append(prev) # 页码 for i in self.page_num_range(): if i == self.Current_page: temp = "<li class='active'><a href='/pager/?p=%s'>%s</a></li>" % (i, i) else: temp="<li><a href='/pager/?p=%s'>%s</a></li>" % (i,i) page_list.append(temp) # 下一页 if self.Current_page == self.num_pages : next_page="<li><a href='#'>下一页</a></li>" else: next_page="<li><a href='/pager/?p=%s'>下一页</a></li>" % (self.Current_page+1) page_list.append(next_page) # 尾页 end_page = "<li><a href='/pager/?p=%s'>尾页</a></li>" % self.num_pages page_list.append(end_page) return ''.join(page_list)
后台视图(Views):
from django.shortcuts import render # 分页数据 USER_LIST=[] for i in range(1,999): temp={'name':'root'+str(i),'age':i} USER_LIST.append(temp) def pager(req): from Management.pager_Class import Pagination current_page=req.GET.get('p') page_obj=Pagination(999,current_page) data_list=USER_LIST[page_obj.start():page_obj.end()] return render(req,"pagers/pagers.html",{"data":data_list,"page_obj":page_obj})
前端页面(Html):
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css"> </head> <body> <ul> {% for row in data %} <li>{{ row.name }}-{{ row.age }}</li> {% endfor %} </ul> <nav aria-label="Page navigation"> <ul class="pagination"> {{ page_obj.page_str | safe }} </ul> </nav> </body> </html>

浙公网安备 33010602011771号