激活排序后SQLFORM.grid搜索出现AttributeError错误的原因排查
SQLFORM.grid开启高级搜索后,排序状态下搜索触发AttributeError的问题确认
这是web2py框架的已知bug,并非你的操作有误。
问题现象
激活排序功能后,使用开启advanced_search=True的SQLFORM.grid进行搜索时,会触发AttributeError错误。
重现步骤
- 创建开启
advanced_search=True的SQLFORM.grid实例 - 点击表格列头启用排序功能
- 点击「搜索」按钮(可输入或不输入关键词)
- 触发错误,报错栈如下:
Traceback (most recent call last): File "C:\Users\User\Desktop\web2py\gluon\restricted.py", line 219, in restricted exec(ccode, environment) File "C:/Users/User/Desktop/web2py/applications/bsmOnline/controllers/library.py", line 113, in <module> File "C:\Users\User\Desktop\web2py\gluon\globals.py", line 430, in <lambda> self._caller = lambda f: f() File "C:/Users/User/Desktop/web2py/applications/bsmOnline/controllers/library.py", line 56, in region create=can_add_library, editable=can_edit_library, deletable=can_delete_library) File "C:\Users\User\Desktop\web2py\gluon\tools.py", line 3951, in f return action(*a, **b) File "C:/Users/User/Desktop/web2py/applications/bsmOnline/models/db1.py", line 78, in library grid = SQLFORM.grid(query, maxtextlength=80, csv=False, **kwargs) File "C:\Users\User\Desktop\web2py\gluon\sqlhtml.py", line 2804, in grid otablename, ofieldname = order.split('~')[-1].split('.', 1) AttributeError: 'list' object has no attribute 'split'
问题根源
点击搜索按钮后,request.vars中的order参数会从字符串类型变为列表类型(例如从order='anykey'变为order=['anykey', 'anykey']),而框架代码中直接对order调用split()方法,未处理其为列表的情况,因此触发错误。
临时修复方案
在创建SQLFORM.grid之前,手动修正request.vars.order的类型:
if request.vars and 'order' in request.vars: # 取列表第一个元素,恢复为字符串类型 request.vars.order = request.vars.order[0]
内容的提问来源于stack exchange,提问作者JeffP
相关产品推荐
相关产品推荐

