该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
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 %}
]
} );