page.py
def __init__(self,current_page_num,all_count,per_age_num=2,pager_count=11) '''current_page:当前页;all_count:数据库中的数据总条数;per_page_num:每页显示的数据条数;pager_count:最多显示的页码个数 try: current_page_num=int(current_page_num) except Exception as e: current_page_num = 1 if current_page_num<1: current_page_num =1 self.current_page_num = current_page_num self.all_count = all_count self.per_page_num = per_page_num #总页码 all_pager,tmp = divmod(all_count,per_page_num) if tmp: all_pager +=1 self.all_pager = all_pager self.pager_count = pager_count self.pager_count_half = int((pager_count -1)/2) @property def start(self): return(self.current_page_num -1)*self.per_page_num @property def end(self): return(self.current_page_num)*self.per_page_num def page_html(self): #如果总页码<11: if self.all_page<=self.pager_count: pager_start = 1 pager_end = self.all_pager +1 #总页码>11: else: #当前页如果<=页面上最多显示11/2个页码 if self.current_page_num <= self.pager_count_half: pager_start =1 pager_end = self.pager_count+1 #当前页>5: else: #页码翻到最后 if (self.current_page_num +self.pager_count_half)>self.all_pager: pager_start = self.all_pager - self.pager_count +1 pager_end = self.all_pager +1 else: pager_start = self.current_pager_num -self.pager_count_half pager_end = self.current_page_num + self.pager_count_half+1 page_html_list =[] first_page = '<li><a href="?page=%s">首页</a></li>'%(1) page_html_list.append(first_page) if self.current_page_num <=1: prev_page = '<li class="disabled"><a href="#">上一页</a></li>' else: prev_page = '<li><a href="?page=%s">上一页</a></li>'%(self.current_page_num-1) page_html_list.append(prev_page) for i in range(pager_start,paper_end): if i == self.current_page_num: temp = '<li class="active"><a href="?page=%s">%s</a></li>'%(i,i) else: temp='<li><a href="?page=%s">%s</a></li>'%(i,i) page_html_list.append(temp) if self.current_page_num >= self.all_pager: next_page = '<li class="disabled"><a href="#">下一页</a></li>' else: next_page = '<li><a href="?page=%s">下一页</a></li>' % (self.current_page_num + 1,) page_html_list.append(next_page) last_page = '<li><a href="?page=%s">尾页</a></li>' % (self.all_pager,) page_html_list.append(last_page) return ''.join(page_html_list)
views.py
from myapp.page import Pagination current_page_num = request.GET.get("page") book_list = Book.objects.all() pagination=Pagination(current_page_num,book_list.count()) book_list=book_list[pagination.start:pagination.end] return render(request,"index.html",locals())
index.html
<body> <ul> {% for book in book_list %} <li>{{ book.title }}----{{ book.price }}</li> {% endfor %} </ul> <nav aria-lable="Page navigation"> <ul class="pagination"> {{ pagination.page_html|safe }} </nav> </body>