对象分为Paginator和Page
Paginator方法:
count 数据总个数
num_pages 总页数
page_range 总页数的索引范围
page page对象
Page方法:
has_next 是否有下一页
objcet_list 分页之后的数据列表
number 当前页
paginator paginator对象
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger L = []for i in range(999): L.append(i) def index(request): current_page = request.GET.get('p') paginator = CustomPaginator(current_page, 11, L, 10) # per_page: 每页显示条目数量 # count: 数据总个数 # num_pages:总页数 # page_range:总页数的索引范围,如: (1,10),(1,200) # page: page对象 try: posts = paginator.page(current_page) # has_next 是否有下一页 # next_page_number 下一页页码 # has_prevIoUs 是否有上一页 # prevIoUs_page_number 上一页页码 # object_list 分页之后的数据列表 # number 当前页 # paginator paginator对象 except PageNotAnInteger: posts = paginator.page(1) except EmptyPage: posts = paginator.page(paginator.num_pages) return render(request, 'index.html', {'posts': posts})
NewPaginator函数:
class NewPaginator(Paginator): def __init__(self, current_page, per_pager_num, *args, **kwargs): # 当前页 self.current_page = int(current_page) # 最多显示的页面数量 self.per_pager_num = int(per_pager_num) super(NewPaginator, self).__init__(*args, **kwargs) def pager_num_range(self): # 如果总页数小于显示页面数量 if self.num_pages < self.per_pager_num: return range(1, self.num_pages + 1) # 如过总页数大于显示页数 part = self.per_pager_num // 2 if self.current_page <= part: return range(1, self.per_pager_num + 1) # 如果显示页面==总页数 if (self.current_page + part) > self.num_pages: return range(self.num_pages - self.per_pager_num+1, self.num_pages + 1) return range(self.current_page - part, self.current_page + part + 1) L = [] for i in range(999): L.append(i) def index(request): current_page = request.GET.get('p') paginator = NewPaginator(current_page, 10) # per_page: 每页显示条目数量 try: posts = paginator.page(current_page) except PageNotAnInteger: posts = paginator.page(1) except EmptyPage: posts = paginator.page(paginator.num_pages) return render(request, {'posts': posts})
html页面
<!DOCTYPE html> <html> <head> <Meta charset="UTF-8"> <title></title> </head> <body> <ul> {% for item in posts %} <li>{{ item }}</li> {% endfor %} </ul> <div> <span> {% if posts.has_prevIoUs %} <a href="?p={{ posts.prevIoUs_page_number }}">PrevIoUs</a> {% endif %} {% for i in posts.paginator.page_num_range %} <a href="?p={{ i }}">{{ i }}</a> {% endfor %} {% if posts.has_next %} <a href="?p={{ posts.next_page_number }}">Next</a> {% endif %} </span> <span> Page {{ posts.number }} of {{ posts.paginator.num_pages }}. </span> </div> </body> </html>