Django 分页
Django分页的常用方法
-
django 提供了一个Paginator的方法
from django.core.paginator import Paginator
-
实例化对象
paginator = Paginator(datalist,per_page) # 里面传两个参数 数据和每页显示的记录数
-
获取数据的分页范围
page_range = paginator.page_range # 获取数据的分页范围 range(1,x) 从第一页到第x-1页
-
获取每页的数据
page_list = paginator.page(num) # 传入页码 获取当前页的数据
-
获取总页数
total_page = paginator.num_pages
-
指定显示的页数
# 当前页码 current_num = int(request.GET.get("page", 1)) # 显示方式 # 一般网页展示11页,左5页,右5页,加上当前页,共11页 # 11 就是可显示的页数 # 5 就是中位数 => 总页数//2 if paginator.num_pages > 11: if current_num - 5 < 1: # 如果前5页小于1时 pageRange = range(1, 11) # 页码的列表:范围是初始状态 elif current_num + 5 > paginator.num_pages: # 如果后5页大于总页数时 # 页码的列表:范围是(当前页-5,总页数+1)。因为range顾头不顾尾,需要加1 pageRange = range(current_num - 5, paginator.num_pages + 1) else: # 页码的列表:后5页正常时,页码范围是(当前页-5,当前页+6)。注意不是+5,因为range顾头不顾尾! pageRange = range(current_num - 5, current_num + 6) else: pageRange = paginator.page_range # 页码的列表
-
封装方法
def get_page(self,pageobj,p,showPage=11): # 1.获取总页数 totalPage = pageobj.num_pages # 2.获取中位数 midPage = int(showPage/2) # 3.如果总页数大于可显示的页数 if totalPage > showPage: # 5. 判断当前页如果小于中位数 if p - midPage < 1: page = [i for i in range(1,showPage+1)] elif p + midPage > totalPage: # 6. 如果当前页+中位数大于总页数的话,那么只能是总页数-(中位数-1)到总页数+1 page = [i for i in range(totalPage-(showPage-1),totalPage+1)] else: # 7. 如果在区间的话,应该是当前页-中位数到当前页+(中位数+1) page = [i for i in range(p-midPage,p+midPage+1)] else: # 4. 当总页数小于可显示的页数的时候,全部显示 page = [i for i in pageobj.page_range] return page