django的分页器

Django中分页器的使用

django分页器模块

#分页器
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger

分页器常用方法:

def index(request):
    book_list=Book.objects.all()
    #实例化分页器对象,第二个对象是每页最大条数
    paginator=Paginator(book_list,21)
    #三个静态方法
    print('count',paginator.count)   #数据总数
    print('num_pages',paginator.num_pages)   #总页数
    print('page_range',paginator.page_range)    #页码范围,相当于(1,总页数+1)
    #取某一页的page对象
    page1=paginator.page(1)    #第一页的page对象
    #遍历第一页的数据对象的两种方式
    for i in page1:
        print(i)
    print(page1.object_list)

    page2=paginator.page(2)
    print(page2.has_next())   #是否有下一页
    print(page2.next_page_number())   #下一页的页码
    print(page2.has_previous())    #是否有上一页
    print(page2.previous_page_number())    #上一页页码

    return render(request,'index.html',locals())

正式建一个分页器:

views:

from django.shortcuts import render,redirect
from .models import *
#分页器
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
# Create your views here.

def add(request):
    #数据库批量添加
    book_list=[]
    for i in range(500):
        book_obj=Book(title='book%s'%i,price=i)
        book_list.append(book_obj)
    Book.objects.bulk_create(book_list)
    return redirect('/index/')

def index(request):

    current_page_num=int(request.GET.get('page',1))
    book_list = Book.objects.all()
    paginator=Paginator(book_list,11)
    page=paginator.page(current_page_num)

html(利用bootstrap框架):

<body>
<ul>
{% for book in page %}
<li>{{ book.pk }}--{{ book.title }}--{{ book.price }}</li>
{% endfor %}
</ul>
<nav aria-label="Page navigation">
    <ul class="pagination">
        <li>
            <a href="?page={{ current_page_num|add:-1 }}" aria-label="Previous">上一页</a>
        </li>
        {% for num in paginator.page_range %}
            {% if current_page_num == num %}
                <li class="active">
                    <a href="?page={{ num }}">{{ num }}</a>
                </li>
            {% else %}
                <li>
                    <a href="?page={{ num }}">{{ num }}</a>
                </li>
            {% endif %}
        {% endfor %}
{#        下一页#}
        {% if page.has_next %}
            <li>
                <a href="?page={{ current_page_num|add:1 }}" aria-label="Next">下一页</a>
            </li>
            {% else %}
            <li class="disabled">
                <a href="#" aria-label="Next">下一页</a>
            </li>
        {% endif %}

    </ul>
</nav>

</body>

 页数比较多时,不一一显示:

可以加一段逻辑

def index(request):
    current_page_num=int(request.GET.get('page',1))
    book_list = Book.objects.all()
    paginator=Paginator(book_list,11)
    num_pages=paginator.num_pages
    #总页数过多时,不一一显示
    if num_pages>11:
        if current_page_num<6:
            page_range=range(1,12)
        elif current_page_num>num_pages-5:
            page_range=range(num_pages-10,num_pages+1)
        else:
            page_range=range(current_page_num-5,current_page_num+6)
    else:
        page_range=paginator.page_range
    page=paginator.page(current_page_num)

 

posted @ 2018-04-11 15:37  Hantaozi  阅读(165)  评论(0编辑  收藏  举报