iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Django分页器
  • 454
分享到

Django分页器

分页Django 2023-01-30 22:01:46 454人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

一.分页器 分页功能是所有网页上都需要提供的功能,当要展示的条目比较多时,就需要进行分页,不但能减小数据库读取数据压力,也有利于用户浏览。 Django为我们提供了一个Paginator分页工具,这个类帮助我们来管理分页数据,该类存放在d

一.分页器

分页功能是所有网页上都需要提供的功能,当要展示的条目比较多时,就需要进行分页,不但能减小数据库读取数据压力,也有利于用户浏览。
Django为我们提供了一个Paginator分页工具,这个类帮助我们来管理分页数据,该类存放在djanGo/core/paginator.py它可以接收列表、元组或其他可迭代对象。

实例:

from django.core.paginator import Paginator
lis = ['yven','lqz','egon','hwt','lyf']
# 对lis进行分页,每页2条数据
p = Paginator(lis,2)

# 每页显示条目数量,显示2
print(p.per_page)

# page对象
print(p.page)

# 对象的个数,显示5
print(p.count)

# 总共几页,显示3
print(p.num_pages)

# 分页范围,返回一个可迭代对象 显示range(1,4)
print(p.page_range)

# 获取第一页
page1 = p.page(1)
# 显示<Page 1 of 3>
print(page1)
# 获取第一页的对象 显示['yven', 'lqz']
print(page1.object_list)

page2 = p.page(2)
# 当前页页码 显示2
print(page2.number)
# paginator对象
print(page2.paginator)
print(page2.object_list) #['egon', 'hwt']
# 判断是否有下一页 显示True
print(page2.has_next())
# 判断是否有上一页 显示True
print(page2.has_previous())
# 判断是否其他页 显示True
print(page2.has_other_pages())
# 获取下一页页码 显示3
print(page2.next_page_number())
# 获取上一页页码 显示1
print(page2.previous_page_number())

所以,使用Paginator分四步:

使用任何方法,获取要展示的对象列表QuerySet;

将列表和每页个数传递给Paginator,返回一个分页对象;

调用该对象的各种方法,获取各种分页信息;

html模板中,使用上面的分页信息构建分页栏。

二.使用Paginator

批量导入数据

需要插入需要调数据时,大部分人会想到使用循环来插入输入,但这样会影响效率,因为每次循环都会去找到那张表,再进行插入记录,所以这时就可以使用bulk_create实现批量插入,效率会更高。

def index(request):

    book_list = []
    for i in range(100):
        book_list.append(models.Book(name='图书%s'%i,price=10+i))
    models.Book.objects.bulk_create(book_list)
    return HttpResponse('ok')

将图书列表中的数据分页展示出来,每页3个数据

视图层:

def index(request):
    book_list = models.Book.objects.all().order_by('id')
    # 每页显示3条
    paginator = Paginator(book_list, 3)
    try:
        # 前端返回页码
        page = int(request.GET.get('page'))
        current = paginator.page(page)
        # 判断总页码数是否大于9
        if paginator.num_pages > 9:
            # 判断页码是否小于5
            if page < 5:
                page_range = range(1, 10)
            elif page + 4 > paginator.num_pages:
                page_range = range(paginator.num_pages - 8, paginator.num_pages + 1)
            else:
                page_range = range(page - 4, page + 5)
        else:
            # 小于9页,有多少页就显示多少页
            page_range=paginator.page_range
    except Exception as e:
        page = 1
        current = paginator.page(page)
        if paginator.num_pages > 9:
            if page < 5:
                print('aaa')
                page_range = range(1, 10)
        else:
            page_range = paginator.page_range
    return render(request, 'index.html', locals())

模板层

<table class="table table-hover">
    <tr>
        <th>id</th>
        <th>书名</th>
        <th>单价</th>
    </tr>
    {% for book in current %}
    <tr>
        <td>{{ forloop.counter }}</td>
        <td>{{ book.name }}</td>
        <td>{{ book.price }}</td>
    </tr>
    {% endfor %}
</table>
<nav aria-label="Page navigation">
    <ul class="pagination">
        {% if current.has_previous %}
        <li>
            <a href="/index/?page={{ current.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 %}

        {% for foo in page_range %}
        {% if page == foo %}
        <li class="active"><a href="/index/?page={{ foo }}">{{ foo }}</a></li>
        {% else %}
        <li><a href="/index/?page={{ foo }}">{{ foo }}</a></li>
        {% endif %}

        {% endfor %}

        {% if current.has_next %}
        <li>
            <a href="/index/?page={{ current.next_page_number }}" aria-label="Next">
                <span aria-hidden="true">下一页</span>
            </a>
        </li>
        {% else %}
        <li class="disabled">
            <a href="" aria-label="Next">
                <span aria-hidden="true">下一页</span>
            </a>
        </li>
        {% endif %}
    </ul>
</nav>

三.Paginator对象

Paginator类拥有以下方法和属性:
属性:
count:对象的个数
num_pages:页面总数
page_range:基于1的页数范围迭代器
方法:
Paginaor.page(number):返回指定页面的对象列表

四.异常处理

在实例使用中,用户请求的页面,可能千奇百怪,这就会有可能导致异常,需要特别处理,Django为我们内置了下面几个Paginator相关异常。
1.exception InvalidPage[source]:异常的基类,当paginator传入一个无效的页码时抛出。
2.exception PageNotAnInteger[source]:当向page()提供一个不是整数的值时抛出。
3.exception EmptyPage[source]:当向page()提供一个有效值,但是那个页面上没有任何对象时抛出。

--结束END--

本文标题: Django分页器

本文链接: https://www.lsjlt.com/news/180242.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Django分页器
    一.分页器 分页功能是所有网页上都需要提供的功能,当要展示的条目比较多时,就需要进行分页,不但能减小数据库读取数据压力,也有利于用户浏览。 Django为我们提供了一个Paginator分页工具,这个类帮助我们来管理分页数据,该类存放在d...
    99+
    2023-01-30
    分页 Django
  • Django分页器怎么用
    这篇文章给大家分享的是有关Django分页器怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Django是一个大而全的框架。需要明确的是,传参进行分页获取分页后的数据,一般都是通过向服务器发送get请求的方式...
    99+
    2023-06-15
  • Django的分页器实例(paginator)
    先导入模块: from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 分页器paginator 下面的所有方法...
    99+
    2022-06-04
    分页 实例 Django
  • Django分页器的用法详解
    目录1、准备基础数据 2、一次性展示数据 3、引入分页器 附:drf分页器的使用1.1 PageNumberPagination 1.2 LimitOffsetPagination ...
    99+
    2022-11-12
  • Django分页器的使用方法
    这篇文章主要介绍了Django分页器的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Django是一个大而全的框架。需要明确的是,传参进行分页获取分页后的数据,一般都...
    99+
    2023-06-15
  • Django自定义分页
    自定义分页 稳扎稳打版 def book(request): # 从URL取参数(访问的页码) page_num = request.GET.get("page") try: # 将取出的p...
    99+
    2023-01-30
    分页 自定义 Django
  • Django drf分页器的使用详解
    前言 当后台返回的数据过多时,我们就要配置分页器,比如一页最多只能展示10条等等,drf中默认配置了3个分页面 PageNumberPagination:基础分页器,性能略...
    99+
    2022-11-12
  • Django Paginator分页器的使用示例
    目录分页后添加删除功能 实现模态框编辑内容 完整代码笔记 利用layui框架实现分页:layui实现完整表格分页:自己实现分页: # name: models.py from dj...
    99+
    2022-11-12
  • Django自定义分页与bootstrap分页结合
    django中有自带的分页模块Paginator,想Paginator提供对象的列表,就可以提供每一页上对象的方法。 这里的话不讲解Paginator,而是自定义一个分页类来完成需求: class Pa...
    99+
    2022-06-04
    分页 自定义 Django
  • Django分页器的用法你都了解吗
    目录1、准备基础数据2、一次性展示数据3、引入分页器Django是一个大而全的框架。需要明确的是,传参进行分页获取分页后的数据,一般都是通过向服务器发送get请求的方式实现的,在向后...
    99+
    2022-11-12
  • django list类型数据分页
    有一个django项目,由于业务要求,自己构造了一个list数据类型。这是一个临时数据,不需要保存到表中,但是需要分页展示。由于之前学习的Django的分页器(paginator),参考链接:https://www.cnblogs.com/...
    99+
    2023-01-31
    分页 类型 数据
  • django中的自定义分页器的实现示例
    目录1.什么是自定义分页器2.为什么要用自定义分页器3.如何使用自定义分页器3.1 自定义分页器推导过程3.2 自定义分页器封装代码3.3 封装好分页器的使用1.什么是自定义分页器 ...
    99+
    2022-11-11
  • django之session与分页(实例讲解)
    前面我们介绍了cookies,主要应用在用户登录上,保存用户登录状态,不过cookies直接放在了浏览器上,安全性较低,所以我们便引出了session功能与cookies相同,不同的是它放在了客户端,相比较...
    99+
    2022-06-04
    分页 实例 django
  • Django前端BootCSS实现分页的方法
    通过使用bootstrap框架,并配合Django自带的Paginator分页组件即可实现简单的分页效果。 1.创建MyWeb项目 python manage.py starta...
    99+
    2022-11-12
  • 使用Django怎么实现一个分页功能
    这篇文章主要为大家详细介绍了使用Django怎么实现一个分页功能,文中示例代码介绍的非常详细,具有一定的参考价值,发现的小伙伴们可以参考一下:创建项目创建APP,添加APP这些就不在多说我们这次重点来看到视图函数下面是路由设置视图函数继承T...
    99+
    2023-06-06
  • Django如何实现翻页
    这篇文章主要介绍了Django如何实现翻页,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Django提供了翻页器。用Django的Paginator类实现一、views模块导...
    99+
    2023-06-15
  • Django原生sql也能使用Paginator分页的示例代码
    django-pagination这是一个python包,来自github上的一个项目,很容易用。 不过这是一个懒人工具,好吧(工具理性)。不过当一个页面有多处需要采用分页的话,就行不通了,要么修改dja...
    99+
    2022-06-04
    也能 分页 示例
  • 分享一个Django-restful-
    git地址 https://github.com/gaojiuli/DRF-startup.git 特征 一个基本的自定义用户 一个自定义认证 一个权限 一个过滤器 一个celery任务 一套CRUD模板 用法 git clone ...
    99+
    2023-01-31
    Django restful
  • django源码分析 LazySetti
    一、django中通过LazySetting对象来获取项目的配置,LazySetting对象有什么特性?为什么使用这个对象? LazySetting顾名思义,就是延迟获取配置内容。比如,我们定义了一个对象A,并对其添加了一些属性,对A初始...
    99+
    2023-01-31
    源码 django LazySetti
  • 怎么使用python django做网页
    要使用Python Django来创建网页,您需要遵循以下步骤:1. 安装Python和Django:首先,您需要安装Python和...
    99+
    2023-09-04
    python django
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作