1、首先 导入DataTable 的插件

2、定义表结构:

HTML: 

  <table>

    <thead>

      <tr>

        <th>id</th>

        <th>任务名称</th>

        <th>状态</th>

      </tr>

    </thead>

    <tbody>

    </tbody>

  </table>

JS:

  var myparas = "?stime="+GetIt["stime"]+"&etime="+GetIt["etime"]+"&which="+GetIt["which"]+"&due="+GetIt["due"];

  var table = $("datatable-buttonss").DataTable({

    "lengthMenu": [16, 32, 48],   // 定义每页展示数据数量

    "aaSorting": [[ 2, "desc" ]],   // 初始化根据第3列降序排列

    "searching": true,  //全文搜索

    "bPaginate": true,   //翻页功能

    "bInfo": true,  //页脚信息

    "bAutoWidth": false,//自动宽度

    "bProcessing": true,  //DataTables载入数据时,是否显示‘进度’提示

    ajax:"/task_mgm/taskDataMine2" + myparas,     // ajaxs向后台请求数据

    "columnDefs":[                                                     // 自定义列功能

    {

      "targets": [ 0 ],   //目标列

    "Sorting": false,  // 是否支持排序

       "width": "5%",   // 列宽

       "visible": false,   // 列不可见

    },

    {

      "targets": [ 1 ],

      "Sorting": false,

      "render": function ( data, type, row, meta )   // data:表格数据 row:该行所有数据 数组形式 所以 data==row[1]

          {return type === 'display' && data.length > 20?'<span title="'+data+'">'+data.substr( 0, 16 )+'...</span>' :data;}

    }, // 给长字符串加省略号

    {

     "targets": [ 2 ],

     "width": "28%",

      "orderable": false,
  "defaultContent": '<i class="fa fa-edit" id="edit">编辑</i>&nbsp;<i class="fa fa-times" id="delete">删除</i>&nbsp;<i class="fa fa-star-o" id="focus">关注</i>&nbsp;<i class="fa fa-share-square-o" id="share">分享</i>',
  "render": function (data, type, full) {
     if(data == 0){return '<i class="fa fa-edit" id="edit">编辑</i>&nbsp;<i class="fa fa-times" id="delete">删除</i>&nbsp;<i class="fa fa-star-o" id="focus">关注</i>&nbsp;<i class="fa fa-share-square-o" id="share">分享</i>';}
     else {return '<i class="fa fa-edit" id="edit">编辑</i>&nbsp;<i class="fa fa-times" id="delete">删除</i>&nbsp;<i class="fa fa-star" id="focus">已关注</i>&nbsp;<i class="fa fa-share-square-o" id="share">分享</i>';}
}
},

    ]

})

<script>

  // 获取任务id 来编辑任务的 两种方式:

  $(function){

  //  1) 通过 编辑按钮 编辑任务

    $("#datatable-buttonss tbody").on('click', '#edit', function () {

      var data = table.row($(this).parents('tr')).data();  //获取本行数据  数组形式
  window.location.href='/task_mgm/taskinfo_editID='+data[0]; // data[0] 第一列数据 即后端传来的任务id
});
    
  
// 2) 通过 点击任务名 通过a标签链接编辑任务    
{
"targets": [ 1 ],
"sorting": false,
"render": function(data, type, full) { // full 以数组形式存放本行数据 full[0]:任务id full[1]:任务名
return '<a id="shareInfo" href="/task_mgm/taskinfo_editID='+full[0]+'">'+ full[1] +'</a>'}
 // 3) 通过1,2方法的组合  即点击任务名 触发事件
{
"targets": [ 1 ],
"sorting": false,
"render": function(data, type, full) { // full 以数组形式存放本行数据 full[0]:任务id full[1]:任务名
return '<a id="shareInfo" href="#'">'+ full[1] +'</a>'
}
$("#datatable-buttonss tbody").on('click', '#shareInfo', function () {
        var data = table.row($(this).parents('tr')).data();
window.location.href="/task_mgm/taskinfo_editID="+data[0];
});
 

}

</script>

后端flask:

  返回的数据格式:['data':  [ [0, '第一个任务',0], [1, ‘第二个任务’, 0], [2,‘第三个任务’,1]] ]

  所以要用工具函数构造此数据, 然后调用该函数返回数据:

def sql3json(objs, fields):  # objs是查询的数据库对象tasks  fields是包含该对象表结构的列属性的列表['id', 'taskName', 'ifFocus']
tabledata = {"data": []}
for obj in objs:
row = [None]*len(fields)
for field in [x for x in dir(obj) if x in fields]:
if field == 'urgentId':
data = obj.urgence.urgentName
else:
data = obj.__getattribute__(field)
if data is None:
data = ''
if data is False:
data = 0
if data is True:
data = 1
if isinstance(data, datetime.datetime):
data = data.strftime('%Y-%m-%d %H:%M')
if data == '2099-01-01':
data = '时间未定'
row[fields.index(field)] = data
tabledata["data"].append(row)
tabledata = repr(tabledata).replace("'", "\"") # 输出字符串形式,且以“”作为字符串的头尾
return tabledata
# 我的任务数据
@task_mgm.route('/taskDataMine', methods=['GET', 'POST'])
@sso_wrapper
def taskinfo_dataMine_fun():
# 应该根据用户名或ID 的到自己的任务 现在先暂时应任务ID
tasks = Task.query.filter(and_(Task.isDelete != 1, Task.endState != 1)).order_by(Task.urgentGrade.desc()).all()
data = sql3json(tasks, ["id", "taskName", "ifFocus"])
data = data.replace("None", "\" \"")
return data

  

  

插件 DataTable 创建列表 render参数的详解与如何传递本行数据id的更多相关文章

  1. DAX/PowerBI系列 - 查询参数用法详解(Query Parameter)

    PowerBI  - 查询参数用法详解(Query Parameter) 很多人都不知道查询参数用来干啥,下面总结一下日常项目中常用的几个查询参数的地方.(本人不太欢hardcode的东西) 使用查询 ...

  2. MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解

    MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Mycat介绍 1>.什么是Mycat Mycat背后是 ...

  3. Scala 深入浅出实战经典 第60讲:Scala中隐式参数实战详解以及在Spark中的应用源码解析

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  4. java newInstance() 的参数版本与无参数版本详解

    newInstance() 的参数版本与无参数版本详解 博客分类: Core Java   通过反射创建新的类示例,有两种方式: Class.newInstance() Constructor.new ...

  5. SpringCloud Eureka参数配置项详解

    SpringCloud Eureka参数配置项详解(转) Eureka涉及到的参数配置项数量众多,它的很多功能都是通过参数配置来实现的,了解这些参数的含义有助于我们更好的应用Eureka的各种功能,下 ...

  6. druid 参数配置详解

    druid 参数配置详解 */--> druid 参数配置详解 Table of Contents 1. 初始化连接 2. 参数配置及说明 3. 注意事项 3.1. 底层连接 3.2. 空闲检查 ...

  7. socket参数的详解

    socket参数的详解 socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) 创建socket对象的参数说明: fami ...

  8. Scala 深入浅出实战经典 第62讲:Scala中上下文界定内幕中的隐式参数实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...

  9. js实现的新闻列表垂直滚动实现详解

    js实现的新闻列表垂直滚动实现详解:新闻列表垂直滚动效果在大量的网站都有应用,有点自然是不言而喻的,首先由于网页的空间有限,使用滚动代码可以使用最小的空间提供更多的信息量,还有让网页有了动态的效果,更 ...

随机推荐

  1. 18.JAVA经典编程题(50题及答案)

    用oop做一个进销存系统:1.货物对象属性:编号(唯一),名称,单价,类别,厂家,厂家地址,厂家联系方式,库存,最后进货时间2.功能:登录,入库,出库,库存查询,操作记录查询3.功能描述:登录:管理员 ...

  2. 深度学习框架PyTorch一书的学习-第六章-实战指南

    参考:https://github.com/chenyuntc/pytorch-book/tree/v1.0/chapter6-实战指南 希望大家直接到上面的网址去查看代码,下面是本人的笔记 将上面地 ...

  3. node.js之Cookie

    最近还是用node.js比较多,今天正好遇见一个问题,还是关于Cookie. node.js中如何实现cookie(以express框架为例): "use strict"; var ...

  4. Linux内核入门到放弃-内存管理-《深入Linux内核架构》笔记

    概述 内存管理的实现涵盖了许多领域: 内存中的物理内存页管理 分配大块内存的伙伴系统 分配较小内存块的slab.slub和slob分配器 分配非连续内存块的vmalloc机制 进程的地址空间 在IA- ...

  5. 环境部署(九):linux下安装python+chrome+Xvfb

    在基于selenium进行的UI自动化测试中,开发调试环境一般都是windows操作系统.完成后需要部署到专门的测试环境. 如要要部署到linux环境的服务器(阿里云.腾讯云)执行,那么测试脚本也需要 ...

  6. Mysql数据库表被锁定处理

    1.查进程,查找被锁表的那个进程的ID show processlist; command 为waitting的就是锁住的表,info为执行某条语句的信息,id为进程. 2.kill掉锁表的进程ID ...

  7. Luogu4745/Gym101620G CERC2017 Gambling Guide 期望、DP、最短路

    传送门--Luogu 传送门--Vjudge 设\(f_x\)为从\(x\)走到\(N\)的期望步数 如果没有可以不动的限制,就是隔壁HNOI2013 游走 如果有可以不动的限制,那么\(f_x = ...

  8. 多个jdk 变更 引起 tomcat插件 启动不了 The JRE could not be found.Edit the server and change the JRE location.

    The JRE could not be found.Edit the server and change the JRE location. 在Windows->Preferences-> ...

  9. MySQL表结构变更,不可不知的Metadata Lock

    在线上进行DDL操作时,相对于其可能带来的系统负载,其实,我们最担心的还是MDL其可能导致的阻塞问题. 一旦DDL操作因获取不到MDL被阻塞,后续其它针对该表的其它操作都会被阻塞.典型如下,如阻塞稍久 ...

  10. java 类与类,类与接口 ,接口与接口关系

    类: 生活中类是人们对客观事物不断认识而产生的抽象概念,而对象则是现实生活中的一个个实体 面向对象程序设计中,对象是程序的基本单位,相似的对象像变量和类型的关系一样归并到一类,所以,并不先具体地定义对 ...