django之分页器
目录
- Django的分页器(paginator)
- view.py
- index.html
Django的分页器(paginator)
view.py
from django.shortcuts import render,HttpResponse
from app01.models import *
from django.core.paginator import Paginator,EmptyPage # 导入分页器Paginator和空白页组件EmptyPage
# Create your views here.
def index(request):
book_list=Book.objects.all() # 获取全部models对象
paginator=Paginator(book_list,5) # 将models对象传给分页器,设置每页有五个对象
# print('count:',paginator.count) # paginator.count为book_list的全部对象个数
# print('num_pages:',paginator.num_pages) # paginator.num_pages为一共有多少页(paginator.count/5)
# print('page_range:',paginator.page_range) # page_range, 一个页码range对象,比如38页: range(1,39)
try:
current_page_num=int(request.GET.get('page',1)) # page为url中问号后的参数页码的值, 如果没有值默认为1
# http://127.0.0.1:8000/index/?page=2
current_page=paginator.page(current_page_num) # 获取当前页码的所有对象
except EmptyPage as e: # 如果超出page传的参数超过页码范围会出现EmptyPage异常
current_page = paginator.page(1) # 这里给出默认值1
if paginator.num_pages > 11: # 这里的if判断是需要前端显示11个页码, 并对三种情况分别判断
if current_page_num - 5 < 1:
page_range = range(1, 12)
elif current_page_num + 5 > paginator.num_pages:
page_range= range(paginator.num_pages-11,paginator.num_pages+1)
else:
page_range = range(current_page_num-5,current_page_num+6)
else:
page_range=paginator.page_range
return render(request,'index.html',locals())
index.html
Title
// 显示对应页码的数据
{% for book in current_page %}
- {{ book.title }}
{% endfor %}