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 %}

 

posted on 2019-10-26 11:14  *星  阅读(240)  评论(0编辑  收藏  举报