效果图:
views.py文件
1 from django.shortcuts import render 2 from app01.pager import Pagination 3 # Create your views here. 4 5 user_list = [] 6 7 for i in range(1,666): 8 user = {'name':'root%s'% i ,'age':i} 9 user_list.append(user) 10 11 12 def index(request): 13 cur_page = request.GET.get('p') 14 15 item = Pagination(len(user_list),cur_page,'index.html') 16 data = user_list[item.start:item.end] 17 return render(request,'index.html',{'data':data,'item':item})
自己开发的分页 pager.py文件
1 class Pagination: 2 def __init__(self,maxPageItems,currenPageNum,url,pageItemLs=20,maxPageNum=11): 3 ''' 4 5 :param maxPageItems: 总共有多少条数据 --- page_items_max 6 :param currenPageNum: 当前页码 --- curren_page_num 7 :param pageItemLs: 一页显示多少条数据--- page_item_list 8 :param maxPageNum: 页面最多显示多少页码---max_page_num 9 :param url: 在哪个页面进行分页 --- url 10 ''' 11 self.url = url 12 self.page_items_max = maxPageItems 13 self.page_item_list = pageItemLs 14 15 #如果最多显示页码大于总页数,那就把总页数赋值给最多显示页码 16 self.max_page_num = maxPageNum if self.total_page_num > maxPageNum else self.total_page_num 17 ''' 18 如果传入的当前页码不是整数,当前页码就直接赋值为1, 19 如果传入的当前页码小于等于0 ,当前页码就直接赋值为1, 20 如果传入的当前页码大于数据能分出来的最大页码数,就把当前页码赋值为最大页码数 21 否则就把传入的当前页码赋值给当前页码 22 ''' 23 try: 24 v = int(currenPageNum) 25 if v <= 0 : 26 self.curren_page_num = 1 27 elif v > self.total_page_num: 28 self.curren_page_num = self.total_page_num 29 else: 30 self.curren_page_num = v 31 except Exception as e: 32 self.curren_page_num = 1 33 34 35 @property 36 def total_page_num(self): 37 ''' 38 计算总页数 39 :return: 40 ''' 41 total,b = divmod(self.page_items_max,self.page_item_list) 42 total = total + 1 if b != 0 else total 43 return total 44 45 @property 46 def start(self): 47 '''计算数据切片的起始切片位置''' 48 return ( self.curren_page_num -1 ) * self.page_item_list 49 50 @property 51 def end(self): 52 '''计算数据切片的结束切片位置''' 53 return self.curren_page_num * self.page_item_list 54 55 56 def pagenum_range(self): 57 ''' 58 动态生成页码 59 :return: 60 ''' 61 #以显示页码数量的一半为临界点 62 page = self.max_page_num // 2 63 if self.curren_page_num <= page: 64 #如果当前页码小于临界点,页码的显示就是 1 - 最大能分出的页码数 65 return range(1,self.max_page_num+1) 66 67 #如果(当前页 + page) 要大于 总页码数量, 页码数就显示 (总页数 - 一页最多显示页码数 +1) - (总页数 + 1) 68 if (self.curren_page_num + page) > self.total_page_num : 69 return range(self.total_page_num - self.max_page_num + 1 ,self.total_page_num +1 ) 70 71 # 页码数就显示 (当前页码数 - page) - (当前页 + page + 1) 72 return range(self.curren_page_num - page,self.curren_page_num + page + 1) 73 74 def item_list(self): 75 ''' 76 返回HTML代码 77 :return: 78 ''' 79 80 item = [] 81 ele = '<li><a href="%s?p=1">首页</a></li>' % (self.url) 82 item.append(ele) 83 if self.curren_page_num == 1 : 84 ele = '<li class="disabled"><a>上一页</a></li>' 85 else: 86 ele = '<li><a href="%s?p=%s">上一页</a></li>' % (self.url,self.curren_page_num - 1) 87 item.append(ele) 88 for i in self.pagenum_range(): 89 if i == self.curren_page_num: 90 ele = '<li class="active"><a href="%s?p=%s">%s</a></li>' % (self.url,i,i) 91 else: 92 ele = '<li><a href="%s?p=%s">%s</a></li>' % (self.url, i, i) 93 item.append(ele) 94 95 if self.curren_page_num == self.total_page_num: 96 ele = '<li class="disabled"><a>下一页</a></li>' 97 else: 98 ele = '<li><a href="%s?p=%s">下一页</a></li>'% (self.url,self.curren_page_num + 1) 99 item.append(ele) 100 101 ele = '<li><a href="%s?p=%s">尾页</a></li>' % (self.url,self.total_page_num) 102 item.append(ele) 103 104 105 return ''.join(item)
<!DOCTYPE html> <html lang="en"> <head> {% load staticfiles %} <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="{% static 'plugin/bootstrap-3.3.7-dist/css/bootstrap.css' %}"> </head> <body> <ul> {% for i in data %} <li> {{ i.name }} - {{ i.age }}</li> {% endfor %} </ul> <nav aria-label="..."> <ul class="pagination"> {{ item.item_list | safe}} </ul> </nav> </body> </html>