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 条评论
登录 后参与评论

相关文章

来自专栏GIS讲堂

Openlayers4中地图的导出

本文讲述Openlayers4中地图的导出,包括调用天地图切片跨域、Geoserver11 WMS跨域等。

1582
来自专栏老马寒门IT

05-移动端开发教程-CSS3兼容处理

CSS3的标准并没有全部定稿,目前CSS3的标准分成了不同的模块,具体的标准由各个模块推动标准和定稿,标准制定的过程中,浏览器也在不断的发新的版本来兼容新的标准...

35012
来自专栏马涛涛的专栏

使用NPM

Nodejs生态圈很强大,第一个原因就是NPM,因为全球有无数的程序员在NPM中贡献了自己的力量。

883
来自专栏从零开始学自动化测试

python接口自动化12-案例分析(csrfToken)

前言: 有些网站的登录方式跟前面讲的博客园和token登录会不一样,把csrfToken放到cookie里,登录前后cookie是没有任何变化的,这种情况下如何...

2697
来自专栏阮一峰的网络日志

Compass用法指南

几个月前,我介绍了Sass的用法。 Sass是一种"CSS预处理器",可以让CSS的开发变得简单和可维护。但是,只有搭配Compass,它才能显出真正的威力。 ...

3475
来自专栏FreeBuf

鲶鱼CMS存储XSS漏洞披露

概述 Catfish(鲶鱼) CMS是一款开源的PHP内容管理系统。这个cms是十月我和学长小胡子一起审计的。所以在这里声明下,洞是他找的,他不善言辞,授权给我...

2127
来自专栏偏前端工程师的驿站

Node魔法堂:NPM入了个门

一、前言                                NPM作为Node的模块管理和发布工具,作用与Ruby的gem、Python的pypl或...

1889
来自专栏CRPER折腾记

Vue 折腾记 - (12) Nuxt.js写一个校验访问浏览器设备类型及环境的中间件

Nuxt.js就是一个Vue的服务端渲染框架,和React的服务端渲染框架Next.js类似,

1352
来自专栏Jerry的SAP技术分享

webpack-dev-server启动后, localhost:8080返回index.html的原理

webpack-dev-server是一个采用Node.js Express实现的微型服务器, 内部使用webpack-dev-middleware来响应发送到...

1452
来自专栏抠抠空间

Django项目实战之用户头像上传与访问

1 将文件保存到服务器本地 upload.html <!DOCTYPE html> <html lang="en"> <head> <meta char...

3997

扫码关注云+社区