1、Django自带分页器类名为Paginator,它可以接收列表,元组或者其他可迭代对象。
from django.core.paginator import Paginator #导入Paginator book_list = ['book1','book2','book3','book4'] Paginator = Paginator(book_list, 2) #每一页显示几条 创建一个panginator对象,即分页对象 #Paginator类的属性和方法 # print(Paginator.count) # 所有页面对象总数,即统计列表中总数目 # print(Paginator.num_pages) # 列表被分成总共几页 # print(Paginator.page_range) # 页码范围,从1开始,顾头不顾尾 Page = Paginator.get_page(2) #获取第2页数据 print(list(Page)) #Page对象的方法 Page.has_next() #是否有下一页 Page.has_previous() #是否有上一页 Page.has_other_pages() #是否有上一页或下一页 Page.next_page_number() #下一页的页码。如果下一页不存在,抛出InvlidPage异常。 Page.previous_page_number() #上一页的页码。如果上一页不存在,抛出InvalidPage异常。 Page.start_index() #当前页上的第一个对象,例如第二页的start_index()会返回3。 Page.end_index() #当前页上的最后一个对象,例如第二页的end_index() 会返回 4。 #page对象的属性 Page.object_list #当前页上所有对象的列表。 Page.number #当前页的序号,从1开始。 Page.paginator #相关的Paginator对象
后端分页实现:
views.py
from django.shortcuts import render,HttpResponseRedirect from django import forms from user import models from .const import page_limit from django.core.paginator import Paginator # Create your views here. def index(request): limit = request.GET.get('limit',page_limit)#获取limit数据,字典的get方法 page = request.GET.get('page',1)#获取第几页 page_obj = Paginator(models.Article.objects.all().order_by('id'),limit)#对文章进行分页 page_data = page_obj.get_page(page)#获取某一页的分页数据 print(page_obj.num_pages) dic = {'articles':page_data} return render(request,'index.html',dic)
前端实现:
index.html
{% block pagination %} {% if articles.has_other_pages %} <!-- 是否有其他页--> <div> <ul class="pagination"> {% if articles.has_previous %} {# 判断是否有上一页,有的话展示《#} <li><a href="/index/?limit={{ page_limit }}&page={{ articles.previous_page_number }}">«</a></li> {% endif %} {% for num in articles.paginator.page_range %} {% if articles.number == num %} {# 判断当前页码和循环到的页码是否相等,相等则高亮#} <li><a class="active" href="/index/?limit={{ page_limit }}&page={{ num }}">{{ num }}</a></li> {% else %} <li><a href="/index/?limit={{ page_limit }}&page={{ num }}">{{ num }}</a></li> {% endif %} {% endfor %} {# 判断是否有下一页#} {% if articles.has_next %} <li><a href="/index/?limit={{ page_limit }}&page={{ articles.next_page_number }}">»</a></li> {% endif %} {# <li><a href="#">»</a></li>#} </ul> </div> {% endif %} {% endblock %}