1 class PageInfo: 2 def __init__(self,page_num,per_page,all_page,base_page): 3 ''' 4 :param page_num: 当前页 5 :param per_page: 每页数据数量 6 :param all_page: 总数据量 7 :param base_page: 固定页数 8 ''' 9 try: 10 self.page_num = int(page_num) 11 except Exception as e: 12 self.page_num = 1 13 self.per_page = int(per_page) 14 self.all_page = all_page 15 self.base_page = base_page 16 17 def start(self): 18 return (self.page_num - 1) * self.per_page 19 20 def end(self): 21 return self.page_num * self.per_page 22 23 #总页数函数(总数据/每页条数) 24 def total_pages(self): 25 a,b = divmod(self.all_page,self.per_page) 26 if b: 27 a = a+1 28 return a 29 30 def pager(self): 31 page_list = [] 32 harf = divmod(self.base_page, 2)[0] 33 #如果总页数小于固定分页 34 if self.total_pages() <= self.base_page: 35 begin = 0 36 end = self.total_pages() 37 #如果当前页 + 固定页的一半大于总页数 38 elif self.page_num + harf >= self.total_pages(): 39 begin = self.total_pages() - self.base_page + 1 40 end = self.total_pages() 41 #如果当前页小于harf+1 42 elif self.page_num < harf+1: 43 begin = 1 44 end = self.base_page 45 else: 46 begin = self.page_num - harf 47 end = self.page_num +harf 48 49 #上一页 50 if self.page_num <= 1: 51 prev = '<li><a href="#">上一页</a></li>' 52 else: 53 prev = '<li><a href="?p=%s">上一页</a></li>'%(self.page_num - 1) 54 page_list.append(prev) 55 56 for i in range(begin , end + 1): 57 if i == self.page_num: 58 temp = '<li class="active"><a href="?p=%s">%s</a></li>' % (i, i) 59 else: 60 temp = '<li><a href="?p=%s">%s</a></li>' % (i, i) 61 page_list.append(temp) 62 63 # 下一页 64 if self.page_num >= self.total_pages(): 65 prev = '<li><a href="#">下一页</a></li>' 66 else: 67 prev = '<li><a href="?p=%s">下一页</a></li>' % (self.page_num + 1) 68 page_list.append(prev) 69 70 return page_list 71 72 def custom(request): 73 page_num = request.GET.get('p') #当前页 74 all_page = models.UserInfo.objects.all().count() 75 # 实例化一个page_info对象 76 page_info = PageInfo(page_num,10,all_page,11) 77 user_list = models.UserInfo.objects.all()[page_info.start():page_info.end()] 78 return render(request,'custom.html',{'user_list':user_list,'page_list':page_info.pager()})
HTML代码:
<label for=""> {% for row in user_list %} <li>{{ row.id }},{{ row.name }},{{ row.age }}</li> {% endfor %} <nav aria-label="Page navigation"> <ul class="pagination"> {% for page in page_list %} {{ page |safe }} {% endfor %} </ul> </nav> </label>