在使用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代码遇到了难题,未能实现我要的功能。
本人为了尽快让系统上线,尝试了另外一种实现方法,此方法忽略对系统性能的影响,目的是尽快实现所需的功能。以下是截图:可以看到在清单的下方,添加了三个切换每页显示数的链接,点相应链接就可以实现每页显示记录数的切换。

这三个链接代码如下:
<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行/页

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


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

被折叠的 条评论
为什么被折叠?



