Django的分页器(paginator)

 

 

首先你要先导入Paginator

from django.core.paginator import Paginator

 

 

 

你要再创建分页对象  然后通过这个对象来调用分页的所有的属性

paginator = Paginator(book_list, 2)  #设置每一页显示几条  创建一个panginator对象

 

属性:

 

    print(Paginator.count) #总数据量
    print(Paginator.num_pages) #分页数
    print(Paginator.page_range) #显示的是页数的标记 就是按钮的数目
    print(page2.has_next())            #是否有下一页
    print(page2.next_page_number())    #下一页的页码
    print(page2.has_previous())        #是否有上一页
    print(page2.previous_page_number()) #上一页的页码
 

 

 print(paginator.count)  #通过你创建的对象来调用pangnator的属性  这个是统计总数
    print(paginator.num_pages)  #因为你上面设置了每一页显示两条  这个分页就会是总数除去每一页的显示的数量
    print(paginator.page_range)
    book_list = paginator.page(1)   #这个是对你的分页的数据进行取值  去除你的分过后的第一页
    # book_list ,   paginator.page是取你的分页后的某一页
    print(book_list)

 

 

 

 

 

 

做一个分页的演示

urls:

from django.contrib import admin
from django.urls import path
from one import views
urlpatterns = [
    path('admin/', admin.site.urls),
    # path('login/',views.login,name = 'login'),
    # path('index/' ,views.index, name='index' ),
    # path('add/',views.adduser, name='add'),
    # path('logout/',views.logout)
    path('index/',views.index),

]
View Code

 

 

views:

from one.models import Book
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def index(request):
    # book_list = []
    # for i in range(100):
    #
    #     # book = Book(title = 'book_%s'%i,price = i*i)
    #     # book_list.append(book)
    #     book = Book(title = 'book_%s'%i,price = i*i)
    #     book_list .append(book)
    #
    # Book.objects.bulk_create(book_list)  #builk_create 是批量创建数据





    # print(Paginator.count) #总数据量
    # print(Paginator.num_pages) #分页数
    # print(Paginator.page_range) #显示的是页数的标记 就是按钮的数目



    book_list = Book.objects.all()
    paginator = Paginator(book_list, 2)  #设置每一页显示几条  创建一个panginator对象

    # try:
    #     current_num = int(request.GET.get('page',1))
    #
    #     book_list = paginator.page(current_num)



    # print(paginator.count)  #通过你创建的对象来调用pangnator的属性  这个是统计总数
    # print(paginator.num_pages)  #因为你上面设置了每一页显示两条  这个分页就会是总数除去每一页的显示的数量
    # print(paginator.page_range)
    # book_list = paginator.page(1)   #这个是对你的分页的数据进行取值  去除你的分过后的第一页
    # # book_list ,   paginator.page是取你的分页后的某一页
    # print(book_list)

    book_list = Book.objects.all()
    paginator = Paginator(book_list, 2)  # 设置每一页显示几条  创建一个panginator对象

    try:
        current_num = int(request.GET.get('page',2))  #当你在url内输入的?page = 页码数  显示你输入的页面数目 默认为第2页
        book_list = paginator.page(current_num)
    except EmptyPage:
            book_list = paginator.page(4)  #当你输入的page是不存在的时候就会报错

    if paginator.num_pages > 11:  # 如果分页的数目大于11
            if current_num - 5 < 1:  # 你输入的值
                pageRange = range(1, 11)  # 按钮数
            elif current_num + 5 > paginator.num_pages:  # 按钮数加5大于分页数
                pageRange = range(current_num - 5, current_num + 1)  # 显示的按钮数

            else:
                pageRange = range(current_num - 5, current_num + 6)  # range求的是按钮数   如果你的按钮数小于分页数 那么就按照正常的分页数目来显示

    else:
        pageRange = paginator.page_range()  # 正常分配





    return render(request,'index_one.html',locals())
Views

 

 

 

 

 

index:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.1.0/css/bootstrap.css">
</head>
<body>
<h3>INDEX</h3>


<ul>
    {% for book in book_list %}
    <li>{{ book.title }}---{{ book.price }}</li>
    {% endfor %}
</ul>


<nav aria-label="Page navigation">
  <ul class="pagination">

    {% if book_list.has_previous %}
        <li><a href="?page={{ book_list.previous_page_number }}" aria-label="Previous"><span aria-hidden="true">上一页</span></a></li>
    {% else %}
            <li class="disabled"><a href="" aria-label="Previous"><span aria-hidden="true">上一页</span></a></li>
    {% endif %}    
{#  disabled是当你的按钮不满足的时候不可以点击了#}




    {% for i in pageRange %}
         {% if current_num == i %}
          <li class="active"><a href="?page={{ i }}">{{ i }}</a></li>

         {% else %}
          <li><a href="?page={{ i }}">{{ i }}</a></li>
         {% endif %}


    {% endfor %}


    <li>
      <a href="#" aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
  </ul>
</nav>

</body>
</html>
index

 

posted @ 2018-07-10 10:30  可爱的红领巾  阅读(12201)  评论(0编辑  收藏  举报