iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >django中的自定义分页器的实现示例
  • 230
分享到

django中的自定义分页器的实现示例

2024-04-02 19:04:59 230人浏览 安东尼

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

摘要

目录1.什么是自定义分页器2.为什么要用自定义分页器3.如何使用自定义分页器3.1 自定义分页器推导过程3.2 自定义分页器封装代码3.3 封装好分页器的使用1.什么是自定义分页器

1.什么是自定义分页器

当我们需要在前端页面展示的数据太多的时候,我们总不能将数据展示在一页上面吧!这时,我们就需要自定义一个分页器,将数据分成特定的页数进行展示,每一页展示固定条数的数据!

2.为什么要用自定义分页器

如上所说:为了将数据分成多页进行展示,分别阅读,方便查询!

3.如何使用自定义分页器

3.1 自定义分页器推导过程

虽然!我们有一个封装好的分页器源码,用的时候只需要cv大法就行,但是作为一名优秀的程序猿!!我们还是需要知道底层的逻辑是不是!

我们需要明确的是,前端向后端请求的常用方式为get和post请求。分页的时候,我们应该采用get请求的方式给后端传输您需要转到的页数!!

其次我们还需要知道一个点,queryset对象是支持索引取值和切片操作的,但是不支持负数索引情况。

接下来,我们来推导一下分页器的形成的逻辑:

current_page = request.GET.get("page",1)  # 获取用户想访问的页码  如果没有 默认展示第一页
try:  # 由于后端接受到的前端数据是字符串类型所以我们这里做类型转换处理加异常捕获
  current_page = int(current_page)
except Exception as e:
  current_page = 1
# 还需要定义页面到底展示几条数据
per_page_num = 10  # 一页展示10条数据

# 需要对总数据进行切片操作 需要确定切片起始位置和终止位置
start_page = ? 
end_page = ?
"""
下面需要研究current_page、per_page_num、start_page、end_page四个参数之间的数据关系
per_page_num = 10
current_page                start_page                  end_page
    1                           0                           10
    2                           10                          20
    3                           20                          30  
    4                           30                          40

per_page_num = 5
current_page                start_page                  end_page
    1                           0                           5
    2                           5                           10
    3                           10                          15  
    4                           15                          20
可以很明显的看出规律
start_page = (current_page - 1) * per_page_num
end_page =  current_page* per_page_num
"""

我们研究完当前页(current_page)、每页展示的数据条数(per_page_num)、每页数据的起始位置(start_page)和结束位置(end_page)之后,我们还需要知道的最重要的一点是:

一共需要从数据库取出的数据一共有多少条!!!

此时,我们就需要用到python中的一个内置方法divmod:它是功能是一个数除以另一个数时,返回余数和商!!如:

>>> divmod(100,10)
(10, 0)  # 10页
>>> divmod(101,10)
(10, 1)  # 11页
>>> divmod(99,10)
(9, 9)  # 10页
# 余数只要不是0就需要在第一个数字上加一

我们可以用它来判断我们一共需要多少页!

后端自定义分页器逻辑详解:

def book(request):
    if request.method == 'GET':
        current_page = request.GET.get('page',1) # 获取用户需要访问的页面,如果没有默认返回1
    try:   #异常捕获,因为前端返回的都是字符串,需要把他们都转成数字类型,方便下面做运算操作
        current_page = int(current_page)
    except Exception as e:
        current_page = 1  # 用户输入啥字母等也默认为1
    per_page_num = 10  #每页展示多少条数据
    start_page = (current_page - 1) * per_page_num  #当前页数起始数据
    end_page = current_page * per_page_num  #当前页结束数据
    book_num = models.Book.objects.all() #将所有数据查询出来
    all_count = book_num.count()  # 统计一共有多少数据
    num,more = divmod(all_count,per_page_num)  #divmod方法计算需要的总页数
    if more:
        all_page = num + 1 #more为余数,余为0,则刚刚好是num页数,不为0,则页数加1
    # 然后我们需要在html页面的分页器标签部分,for循环一下总共需要的num页数,但是有一个问题是,前端无法使用range()
    # 这就需要我们在后端进行循环,再传到前端
    html = ''
    a = current_page # 为了下面页码高亮调整
    if current_page <6:  #当页面小于6时,固定在6上面,为下面的for处理不出现页码负数
        current_page = 6
    # 访问第6页时,只会显示当前页-5和+6的底部页码数,但是当页面小于6时,页码会出现0甚至负数,所有我们需要对页面进行一个设置,就是上述的a
    for i in range(current_page-5,current_page+6):
        if a == i:
            # 当前页的页面高亮显示
            html += '<li class="active"><a href="?page=%s" rel="external nofollow"  rel="external nofollow" >%s</a></li>' % (i, i)
        else:
            html += '<li><a href="?page=%s" rel="external nofollow"  rel="external nofollow" >%s</a></li>' % (i, i)
    book_queryset = book_num[start_page:end_page]
    return render(request,'book.html',locals())

前端页面部分:
<nav aria-label="Page navigation">
  <ul class="pagination">
    <li>
      <a href="#" rel="external nofollow"  rel="external nofollow"  aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
        {{ html|safe }}
    <li>
      <a href="#" rel="external nofollow"  rel="external nofollow"  aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
  </ul>
</nav>

3.2 自定义分页器封装代码

封装好的分液器

3.3 封装好分页器的使用

后端

 def get_book(request):
   book_list = models.Book.objects.all()
   current_page = request.GET.get("page",1)
   all_count = book_list.count()
   page_obj = Pagination(current_page=current_page,all_count=all_count,per_page_num=10)
   page_queryset = book_list[page_obj.start:page_obj.end]
   return render(request,'booklist.html',locals())

前端

<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            {% for book in page_queryset %}
            <p>{{ book.title }}</p>
            {% endfor %}
            {{ page_obj.page_html|safe }}
        </div>
    </div>
</div>

 到此这篇关于Django中的自定义分页器的实现示例的文章就介绍到这了,更多相关djanGo 自定义分页器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: django中的自定义分页器的实现示例

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

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

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

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

下载Word文档
猜你喜欢
  • django中的自定义分页器的实现示例
    目录1.什么是自定义分页器2.为什么要用自定义分页器3.如何使用自定义分页器3.1 自定义分页器推导过程3.2 自定义分页器封装代码3.3 封装好分页器的使用1.什么是自定义分页器 ...
    99+
    2022-11-11
  • Python+Flask实现自定义分页的示例代码
    目录前言后端后端思路后端代码前端前端思路前端代码前言 分页操作在web开发中几乎是必不可少的,而我们的flask不像django自带封装好的分页操作,要分页则需要依赖flask-sq...
    99+
    2022-11-11
  • python自定义分页器的实现
    目录自定义分页器封装代码自定义分页器使用后端前端自定义分页器封装代码 封装分页相关数据: :param current_page: 当前页:param all_count: 数据库中...
    99+
    2022-11-10
  • asp.net中mvc4自定义404页面的示例分析
    这篇文章给大家分享的是有关asp.net中mvc4自定义404页面的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。定义404方法当然有很多种。不同的方法所展现的形式也不一...
    99+
    2022-10-19
  • phpunit自定义的示例分析
    这篇文章主要介绍phpunit自定义的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!下载:wget  https://phar.phpunit.de/ph...
    99+
    2022-10-19
  • Django Paginator分页器的使用示例
    目录分页后添加删除功能 实现模态框编辑内容 完整代码笔记 利用layui框架实现分页:layui实现完整表格分页:自己实现分页: # name: models.py from dj...
    99+
    2022-11-12
  • python自定义分页器怎么实现
    本篇内容介绍了“python自定义分页器怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!自定义分页器封装代码封装分页相关数据::par...
    99+
    2023-06-30
  • angular中自定义指令的示例分析
    这篇文章将为大家详细讲解有关angular中自定义指令的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。自定义属性的四种类别分为: 元素E,属性A,注释M,类C ,...
    99+
    2022-10-19
  • AngularJS中自定义服务的示例分析
    这篇文章将为大家详细讲解有关AngularJS中自定义服务的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言1、3种创建自定义服务的方式。FactoryServ...
    99+
    2022-10-19
  • Angularjs中自定义指令的示例分析
    小编给大家分享一下Angularjs中自定义指令的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:自定义指令常用模板下...
    99+
    2022-10-19
  • DatePickerDialog中自定义样式的示例分析
    小编给大家分享一下DatePickerDialog中自定义样式的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.增加Theme主题new DatePickerDialog(thi...
    99+
    2022-10-19
  • Django的分页器实例(paginator)
    先导入模块: from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 分页器paginator 下面的所有方法...
    99+
    2022-06-04
    分页 实例 Django
  • SpringBoot实现自定义启动器的示例详解
    目录开发步骤测试自定义启动器启动器支持多Druid和C3P0开发步骤 1.创建启动器项目 添加启动器相关依赖创建属性配置类创建自动配置类编写自动配置文件(spring.factori...
    99+
    2023-01-12
    SpringBoot自定义启动器 SpringBoot 启动器
  • python迭代器自定义类的示例分析
    这篇文章主要介绍python迭代器自定义类的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、说明迭代器还具有迭代用户定制类别的能力。迭代对象需要支持两种方式:_iter__()和next(),前者返回迭代本...
    99+
    2023-06-14
  • Spring AOP 实现自定义注解的示例
    目录1. 注解如下:2. 切面自工作后,除了一些小项目配置事务使用过 AOP,真正自己写 AOP 机会很少,另一方面在工作后还没有写过自定义注解,一直很好奇注解是怎么实现他想要的功能...
    99+
    2022-11-12
  • Java自定义线程池的实现示例
    目录一、Java语言本身也是多线程,回顾Java创建线程方式如下:二、JDK线程池工具类.三、业界知名自定义线程池扩展使用.一、Java语言本身也是多线程,回顾Java创建线程方式如...
    99+
    2022-11-13
  • Vue自定义指令的示例分析
    这篇文章主要介绍Vue自定义指令的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在 AngularJs 中,它的指令使用 directive ( name,factor_fu...
    99+
    2022-10-19
  • angular4自定义组件的示例分析
    这篇文章主要为大家展示了“angular4自定义组件的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“angular4自定义组件的示例分析”这篇文章吧。在...
    99+
    2022-10-19
  • Vue.directive自定义指令的示例分析
    这篇文章主要介绍Vue.directive自定义指令的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.复习一下Vue自定义指令的代码,结果出现一个很无语的结果,先贴代码。2...
    99+
    2022-10-19
  • AngularJS自定义指令的示例分析
    这篇文章主要介绍AngularJS自定义指令的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言除了 AngularJS 内置的指令外,我们还可以创建自定义指令。 通过 .d...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作