django 写测试工具用到的 paginator 分页

作者:郭佳明

导语

之前写CC的测试平台的时候,里面有一个机器管理列表信息,使用表格来展示的,数据量大概有240多条,需要用到分页。之前没有接触bootstrap table,而是网上随便找了一个表格样式,嵌套了进去。后面做分页又使用了django paginator。做好之后发现,其实bootstrap table也不完全适用我的场景,稍微心里好受点。。

如果想要看bootstrap table做表格以及分页的就网上找资料吧,挺多的。

django paginator也是,现在我主要是再次分享一下我的使用经验。

使用简单,就两步操作如下:

1.django后台页面views文件引用了三个django paginator的包,然后主要逻辑按照如下格式对 all_agents变量做一下分页处理打包成agents变量

from django.core.paginator import Paginator
from django.core.paginator import PageNotAnInteger
from django.core.paginator import EmptyPage

def agentsmanager(request):                 #前台页面访问的时候调用此方法
    page_num=1                               #这里默认查询page_num=1第一页的数据
    if 'page' in request.GET:
        page_num= request.GET['page']

    .....                                    #省略逻辑计算查询结果all_agents

    paginator = Paginator(all_agents, 10)      #默认每页展示10条数据
    try:
        context['agents'] = paginator.page(page_num)
    except PageNotAnInteger:
        context['agents'] = paginator.page(1)
    except EmptyPage:
        context['agents'] = paginator.page(paginator.num_pages)

    return render(request, 'agentsmanager.html', context)

2 渲染agentsmanager.html页面的时候,参数是context,里面包含agents的信息。for循环展示表格内容之后,按照如下格式,对agents变量做一下分页判断

<table>
{% for agent in agents %}
        <tr>
        <td>{{ agent.0 }}td>
        <td>{{ agent.1 }}td>    #这里是渲染表格的内容
        <td>{{ agent.2 }}td>
        tr>
{% endfor %}
table>

 {% if agents.has_previous %}            #这个是分页的判断
 <a class='paginator' title='上一页' href='?page={{ agents.previous_page_number }}'><span><<span>a>
 {% endif %}
 {% for page in agents.paginator.page_range %}
         {% if page == agents.number %}
                 <a class='paginator_current' title='当前页:{{ page }}'><span>{{ page }}span>a>
         {% else %}
                 <a class='paginator' href='?page={{ page }}' title='{{ page }}'><span>{{ page }}span>a>
         {% endif %}
 {% endfor %}
 {% if agents.has_next %}
         <a class='paginator' title='下一页' href='?page={{ agents.next_page_number }}'><span>>>span>a>
 {% endif %}

两步就结束了 因为是测试工具,功能OK就可以了。 当然如果想要做更加好看点,可以上网找点其他资料,或者可以使用bootstrap做分页

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏跟着阿笨一起玩NET

从XML文件乱码问题,探寻其背后的原理

加入xml文件以<?xml version="1.0" encoding="utf-8" ?> 格式的;如果对xml文件进行修改了,其中包含中文字符的内容,另存...

442
来自专栏xingoo, 一个梦想做发明家的程序员

Redis Lua脚本原理

2.6版本之后支持嵌入Lua脚本,客户端使用Lua脚本,直接在服务器端原子的执行多条命令 Lua脚本执行过程 创建并修改Lua环境 1 创建基础Lua环境...

2456
来自专栏一个爱瞎折腾的程序猿

日常开发中的几个常用跨域处理方式

若要通过IP在局域网访问h5,启动开发服务器的时候添加host参数即可 即package.json的dev命令配置如下 "dev": "webpack-de...

512
来自专栏java一日一条

加快Android编译速度的技巧总结

对于Android开发者而言,随着工程不断的壮大,Android项目的编译时间也逐渐变长,即便是有时候添加一行代码也需要等待好久才能看见期待的效果。之前加快An...

431
来自专栏大内老A

[WCF权限控制]模拟(Impersonation)与委托(Delegation)[上篇]

由于服务操作是在寄宿进程中执行,在默认的情况下,服务操作是否具有足够的权限访问某个资源(比如文件)决定于执行寄宿进程Windows帐号的权限设置,而与作为客户端...

2096
来自专栏闻道于事

SpringBoot常用配置

前言:springboot集成了主流的第三方框架,但是需要使用springboot那一套配置方式。但是我这里只列举了非常非常常用的,可以看已发的几篇博客,慢慢会...

4257
来自专栏GopherCoder

『Go 语言学习专栏』-- 第十期

1193
来自专栏idba

分布式任务管理系统 Celery 之二

前面一篇文章分布式任务管理系统 Celery 之一介绍了分布式任务调度队列Celery的框架以及原理,使用的例子比较简单,对实际的使用场景没有意义。本系列文章...

703
来自专栏python读书笔记

python 数据分析基础 day7-xlrd,xlwt读写多个excel通过xlrd和xlwt读多个excel文件并写入一个新excel文件

今天总结的内容为通过xlrd和xlwt模块将读取的多个excel文件中多个工作表输出至多个excel文件中。 通过xlrd和xlwt读多个excel文件并写入一...

2858
来自专栏Linux驱动

第4阶段——制作根文件系统之分析init进程(2)

本节目标: (1) 了解busybox(init进程和命令都放在busybox中) (2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情 ...

2049

扫码关注云+社区