项目开发中使用django_tables2展示数据之切换每页显示数的另类实现方法

在Django项目开发中,利用django_tables2展示数据时,为实现切换每页显示数(如10行、25行、50行),通常依赖前端传递per_page参数。但当遇到前端JavaScript难题时,可以采取另一种方法:通过后端视图函数处理url中的ppage参数,修改session中的per_page,然后重定向到包含查询条件的当前URL。通过添加特定链接,用户可以直接点击切换每页显示的记录数,同时保持查询结果不变。

在使用python+django开发web版《IT资产管理系统》过程中,使用了django_tables2展示资产记录,为了实现切换每页显示10行,25行,50行这个功能,需要前端向后端的视图函数传递per_page参数,这需要在前端页面中使用request.get_full_path获取当前url, 然后在url后面加上&per_page=XX就可以了,django_tables2会自动识别url传递过来的参数,并按收到XX这个参数,以调整每页显示记录的数量,这是通用的解决方案。 因为在测试时前端的javascript代码遇到了难题,未能实现我要的功能。

本人为了尽快让系统上线,尝试了另外一种实现方法,此方法忽略对系统性能的影响,目的是尽快实现所需的功能。以下是截图:可以看到在清单的下方,添加了三个切换每页显示数的链接,点相应链接就可以实现每页显示记录数的切换。

1

 

这三个链接代码如下:

<div class="col-md-2"> 共有: {{ table.paginator.count }}条记录,分{{ table.paginator.num_pages }}页显示,</div>  <nav><ul>当前:{{ table.paginator.per_page }}行/页,切换: <a href="changeperpage?ppage=10">[10行/页] </a> - <a href="changeperpage?ppage=25" >[25行/页] </a>- <a href="changeperpage?ppage=50" >[50行/页] </a></ul></nav>

链接到后端的视图函数changeperpage(),代码如下:

def changeperpage(request):
    next = request.session.get('current_path','displaypc2')

    request.session['per_page']=request.GET.get('ppage','25')

    return HttpResponseRedirect(next)

 

此视图函数负责接受url后面的ppage变量,并修改session变量per_page, 然后跳转到next,这个next是前端资产列表的当前url。

对应的视图函数diaplaypc2:

def displaypc2(request):
    full_path=request.get_full_path()
    
    request.session['current_path']=full_path
    
    f = pclistFilter(request.GET)
    siteid = request.session.get('current_site')
    table=f.qs.filter(site_list_id=siteid,motable__hosttype_list_id__in=(1,2,3,12),pcstatustable_id__in=(1,2,3,5))

    #totalrow=table.count()
    #django_tables2.paginators.Paginator.
    table = pctable2(table)

    per_page=request.session.get('per_page',10)
    RequestConfig(request, paginate={"per_page":per_page}).configure(table)
    return render(request,'displaypc.html',{'table':table,'m':'dm','filter':f})

 

这样就可以自由切换每页显示记录数了。而且可以保持查询结果的前提下切换每页显示记录数。

查询资产类型为laptop, 以下是10行/页

2

以下是在上一页显示的查询结果的基础上,从10行/页切换为25行/页,点相应的链接【25行/页】,结果显示如下:

3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值