专栏首页程序员同行者使用Django实现分页器功能

使用Django实现分页器功能

要使用Django实现分页器,必须从Django中导入Paginator模块

from django.core.paginator import Paginator

假如现在有150条记录要显示,每页显示10条

>>> from django.core.paginator import Paginator#导入Paginator模块
>>> list1=[i for i in range(0,150)]#使用列表生成器生成一个包含150个数字的列表
>>> page1=Paginator(list1,10)#生成一个Paginator对象
>>> print(page1.count)#打印总的记录数,即列表list1的长度
150
>>> print(page1.num_pages)#打印总的页数,即总记录数除以每页显示的条目数
15
>>> print(page1.page_range)#页数的列表
range(1, 16)
>>> print(page1.page(1))#打印第一页的page对象
<Page 1 of 15>
>>> page1.page(1).object_list#打印第一页的所有记录
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> page1.page(2).object_list#打印第二页的所有记录
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> page1.page(2).next_page_number()#打印当前的页(第2页)的下一页的页码
3
>>> page1.page(2).has_next()#第2页是否有下一页
True
>>> page1.page(2).has_previous()#第2页是否有上一页
True
>>> page1.page(2).has_other_pages()#第2是否有其他页
True
>>> page1.page(2).start_index()#第2页第一条记录的序号
11
>>> page1.page(2).end_index()#第2页最后一条记录的序号
20
>>> page1.page(0)#第0页是否有记录,会报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    ...
    raise EmptyPage(_('That page number is less than 1'))
django.core.paginator.EmptyPage: <exception str() failed>
>>> page1.page(15)#打印第15页的对象
<Page 15 of 15>

例子,使用Django实现一个分页效果

后端代码:

#导入render和HttpResponse模块 
from django.shortcuts import render,HttpResponse 
#导入Paginator,EmptyPage和PageNotAnInteger模块 
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def index(request):
    """首页"""

        # 获取Book数据表中的所有记录
    post_list = Post.objects.all()
    print(post_list)

        # 生成paginator对象,定义每页显示10条记录
    paginator = Paginator(post_list, 5)
        # 从前端获取当前的页码数,默认为1
    page = request.GET.get('page', 1)
        # 把当前的页码数转换成整数类型
    currentPage = int(page)

    try:
        print(page)
        post_list = paginator.page(page)  # 获取当前页码的记录
    except PageNotAnInteger:
        post_list = paginator.page(1)  # 如果用户输入的页码不是整数时,显示第1页的内容
    except EmptyPage:
        post_list = paginator.page(paginator.num_pages)  # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容

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

前端代码:

在需要分页的地方加入

{% load staticfiles %}
<div class="container">
    <ul class="pagination" id="pager">
        {#上一页按钮开始#}
        {# 如果当前页有上一页#}
        {% if post_list.has_previous %}
            {#  当前页的上一页按钮正常使用#}
            <li class="previous"><a href="/?page={{ post_list.previous_page_number }}">上一页</a></li>
        {% else %}
            {# 当前页的不存在上一页时,上一页的按钮不可用#}
            <li class="previous disabled"><a href="#">上一页</a></li>
        {% endif %}
        {#上一页按钮结束#}
        {# 页码开始#}
        {% for num in paginator.page_range %}

            {% if num == currentPage %}
                <li class="item active"><a href="/?page={{ num }}">{{ num }}</a></li>
            {% else %}
                <li class="item"><a href="/?page={{ num }}">{{ num }}</a></li>

            {% endif %}
        {% endfor %}
        {#页码结束#}
        {# 下一页按钮开始#}
        {% if post_list.has_next %}
            <li class="next"><a href="/?page={{ post_list.next_page_number }}">下一页</a></li>
        {% else %}
            <li class="next disabled"><a href="#">下一页</a></li>
        {% endif %}
        {# 下一页按钮结束#}
    </ul>
</div>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • django-pure-pagination实现分页

    程序员同行者
  • [转载]windows下安装Python虚拟环境virtualenv,virtualenvwrapper-win

    程序员同行者
  • docker 中ulimit设置理解

    本次出现的问题现象:es pod启动失败,一直报max file descriptors [4096] for elasticsearch process is...

    程序员同行者
  • django 分页

    https://www.jianshu.com/p/77a8ea421e22 https://blog.csdn.net/weixin_42134789/ar...

    晴天Online
  • optimize 回收表空间的一些说明

    线上服务器,有张大表需要用pt-archiver根据时间划分归档大量数据到另一个新表中。原先200G的表,在归档完成后,du -hs 显示依然是200G的大小,...

    二狗不要跑
  • 13.Django基础之django分页

      我们使用脚本批量创建一些测试数据(将下面的代码保存到bulk_create.py文件中放到Django项目的根目录,直接执行即可。):

    changxin7
  • php+mysql实现分页代码

    mysql+php实现分页 数据库设计,如图 ? <?php /** * 1.获取页数 */ $page = empty($_GET['p'])?1:($_GE...

    思梦php
  • CRM之分页

      分页功能在网页中是非常常见的一个功能,其作用也就是将数据分割成多个页面来进行显示。

    py3study
  • Django自定义分页

    py3study
  • python 分页

            class UserList(models.Model):             username = models.CharField(ma...

    py3study

扫码关注云+社区

领取腾讯云代金券