datatable ajax 排序,使用dataTable实现服务端多字段排序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

2,修改排序代码

首先从request当中获得排序的参数:

order_by_column = []

order_by_dir = []

# 支持多排序。使用shift+鼠标左键。

for item, val in self.request.arguments.items():

# print("order:", item)

if str(item).startswith("order["):

print("order:", item, ",val:", val[0])

if str(item).startswith("order[") and str(item).endswith("[column]"):

order_by_column.append(int(val[0]))

if str(item).startswith("order[") and str(item).endswith("[dir]"):

order_by_dir.append(val[0].decode("utf-8")) # bytes转换字符串

设置两个数组保存参数。分别是多参数排序的column和dir。 但是这个数据是一个column的index,需要用index进行索引查询报表的column 名称。

还好这个字典已经存储了。

StockWebData(

type="基本面数据",

name="成长能力",

table_name="ts_growth_data",

columns=['quarter', 'code', 'name', 'mbrg', 'nprg', 'nav', 'targ', 'epsg', 'seg'],

column_names=["季度", "代码", "名称", "主营业务收入增长率(%)", "净利润增长率(%)", "净资产增长率", "总资产增长率",

"每股收益增长率", "股东权益增长率"],

order_by=" quarter desc "

)

增加order by 排序:

# 增加排序。

if len(order_by_column) != 0 and len(order_by_dir) != 0:

order_by_sql = " ORDER BY "

idx = 0

for key in order_by_column:

# 找到排序字段和dir。

col_tmp = stock_web.columns[key]

dir_tmp = order_by_dir[idx]

if idx != 0:

order_by_sql += " ,%s %s" % (col_tmp, dir_tmp)

else:

order_by_sql += " %s %s" % (col_tmp, dir_tmp)

idx += 1

拼接好的sql 放到select 语句的后面就行了。

前段页面修改:

var myTable = $('#dynamic-table').DataTable( {

"bFilter": false,

"ordering": true,

"processing": true,

"serverSide": true,

"lengthMenu": [[20, 30, 50, 100,1000, -1], [20, 30, 50, 100,1000, "All"]],

"language": {

"url": "/static/js/datatables.Chinese.json"

},

"ajax": "/stock/api_data?name="+nameParam,

"columns": [

{% for column in stockWeb.columns %}

{ "data": "{{ column }}" },

{% end %}

]

} );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值