Django组件之分页器

分页器

简单的分页器实现

views.py

from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
from app1.models import *
def index(request):
    # book_list = []
    #
    # # 数据库批量写入数据,比每次打开数据库写入数据效率更高
    # for i in range(100):
    #     book = Book(title=‘book_%s‘%i,price=i+i)
    #     book_list.append(book)
    # Book.objects.bulk_create(book_list)
    book_list = Book.objects.all()
    paginatior = Paginator(book_list,10)

    # book_list中的数量
    print(paginatior.count)
    # 总页数
    print(paginatior.num_pages)
    # 页码的列表
    print(paginatior.page_range)

    # 假设get请求的数据大于或者小于了页码,会报错(EmptyPage错误),在这里捕获这个错误,然后把页码设置为首页
    try:
        page = paginatior.page(1)# 第一页的page对象
        for i in page:# 第一页的所有数据
            print(i)
        # 根据get请求中的参数进行分页
        current_page_num = int(request.GET.get(‘page‘,1))
        current_page = paginatior.page(current_page_num)

        print(current_page.has_next())  # 是否有下一页
        print(current_page.next_page_number())  # 下一页的页码
        print(current_page.has_previous())  # 是否有上一页
        print(current_page.previous_page_number())  # 上一页的页码

    except EmptyPage as e:
        current_page = paginatior.page(1)
    return render(request,‘index.html‘,locals())

分页器实现页码,并且点击页码可以进行跳转

index.html

<body>
<ul>
    {% for book in current_page %}
        <li>{{ book.title }}:{{ book.price }}</li>
    {% endfor %}

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

        {% if current_page.has_previous %}
            <li><a href="?page={{ current_page.previous_page_number }}" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>
        {% else %}
            <li class="disabled"><a href="" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>

        {% endif %}
        {% for itme in paginatior.page_range %}
            {% if current_page_num == itme %}
                <li class="active"><a href="?page={{ itme }}">{{ itme }}</a></li>
            {% else %}
                <li><a href="?page={{ itme }}">{{ itme }}</a></li>
            {% endif %}
        {% endfor %}
        {% if current_page.has_next %}
            <li><a href="?page={{ current_page.next_page_number }}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>
        {% else %}
            <li class="disabled"><a href="" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>

        {% endif %}

    </ul>
</nav>

</body>

优化后的分页器

def index(request):
    # book_list = []
    #
    # # 数据库批量写入数据,比每次打开数据库写入数据效率更高
    # for i in range(100):
    #     book = Book(title=‘book_%s‘%i,price=i+i)
    #     book_list.append(book)
    # Book.objects.bulk_create(book_list)
    book_list = Book.objects.all()
    paginatior = Paginator(book_list,3)
    # book_list中的数量
    print(paginatior.count)
    # 总页数
    print(paginatior.num_pages)
    # 页码的列表
    print(paginatior.page_range)

    # 分页器优化
    current_page_num = int(request.GET.get(‘page‘, 1))
    if paginatior.num_pages > 11:
        if current_page_num -5<1:
            page_range = range(1,11)
        elif current_page_num +5 > paginatior.num_pages:
            page_range = range(paginatior.num_pages-10,paginatior.num_pages+1)
        else:
            page_range = range(current_page_num-5,current_page_num+5)
    else:
        page_range = paginatior.page_range
    print(‘page‘,page_range)
    # 假设get请求的数据大于或者小于了页码,会报错(EmptyPage错误),在这里捕获这个错误,然后把页码设置为首页
    try:
        page = paginatior.page(1)# 第一页的page对象
        for i in page:# 第一页的所有数据
            print(i)
        # 根据get请求中的参数进行分页
        current_page_num = int(request.GET.get(‘page‘,1))
        current_page = paginatior.page(current_page_num)

        print(current_page.has_next())  # 是否有下一页
        print(current_page.next_page_number())  # 下一页的页码
        print(current_page.has_previous())  # 是否有上一页
        print(current_page.previous_page_number())  # 上一页的页码

    except EmptyPage as e:
        current_page = paginatior.page(1)
    return render(request,‘index.html‘,locals())

原文地址:https://www.cnblogs.com/wualin/p/10140179.html

时间: 2024-08-01 19:44:09

Django组件之分页器的相关文章

Django组件——分页器和中间件

分页器 Django内置分页器(paginator) 分页器函数为paginator,里面有几个重要的参数需要我们了解 paginator = Paginator(book_list, 10) #第二个参数表示每页显示的数量 paginator.count) #数据总数 paginator.num_pages #总页数 paginator.page_range #页码的列表 page1=paginator.page(1) #第1页的page对象 for i in page1: #遍历第1页的所有

Django组件-cookie,session

昨日内容回顾: json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() 反序列化方法:JSON.parse() ajax $.ajax({ url:"", type:"", data:{}, // 默认contentType="urlencoded" success:function(data){ } }) 一.Djang

Django组件——cookie与session

Django组件--cookie与session 一.会话跟踪技术 1.什么是会话跟踪技术 先了解一下什么是会话.可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打电话,你就是客户端,而10086服务人员就是服务器,从双方接通电话那一刻起,会话就开始了,到某一方挂断电话就表示会话结束.在通话过程中,你会向10086发出多个请求,这多个请求都在一个会话中. 在JavaWeb在,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览

Django组件-分页器

一丶Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views here. from app01.models import * from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def index(request): ''' 批量导入数据: Booklist=[] fo

Django -- 11.组件_分页器

知识预览: Django的分页器(paginator) Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views here. from app01.models import * from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def index(request):

Django组件

Django的分页器(paginator) demo 视图 from django.shortcuts import render,HttpResponse # Create your views here. from app01.models import * from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def index(request): ''' 批量导入数据: Booklist=[] f

Django组件拾忆

知识预览 一 Django的form组件 二 Django的model form组件 三 Django的缓存机制 四 Django的信号 五 Django的序列化 回到顶部 一 Django的form组件 回到顶部 二 Django的model form组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来 回到顶部 三 Django的缓存机制 1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改

Django组件—forms组件

forms组件: 校验字段功能: 针对一个实例:注册用户. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) pwd=models.CharField(max_length=32) email=models.EmailField() tel=models.CharField(max_length=32) 模板:register.html <!DOCTYPE html> <html

12.Django组件-forms组件

forms组件 校验字段功能 针对一个实例:注册用户讲解. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) pwd=models.CharField(max_length=32) email=models.EmailField() tel=models.CharField(max_length=32) 模板: register.html: <!DOCTYPE html> <ht