Datatables插件的使用(从前台到后台完整流程)

5 篇文章 0 订阅

下载并引入Datatables插件Datatables 中文网http://datatables.club/

<!-- jQuery 3 -->
<script src="../static/jquery/dist/jquery.min.js"></script>
<!-- DataTables -->
<script src="../static/js/jquery.dataTables.min.js"></script>
<!-- DataTables -->
<link rel="stylesheet" href="../static/css/dataTables.bootstrap.min.css">

前端中使用

<div class="box-body">
    <table class="table table-bordered table-striped table-vcenter"       style="width:100%"></table>
</div>

<script>
    var columns = [
        {
            title: 'name',
            target: 0,
            data: function (item) {
                return item.name;
            }
        },
        {
            title: 'age',
            target: 1,
            data: function (item) {
                return item.age;
            }
        },
    ];

    main.initDataTables($(".table"), {
    "ajax": '127.0.0.1:8000/index/data'
    "columns": columns
        });
    });
</script>

在这里我是使用ajax向后台发送请求获取数据。columns表示每列展示的数据。前端就处理完毕,接下来处理后端请求数据即可。

后端

需要注意的是,后端我是在flask框架中进行编写的。可以使用datatables模块快速对数据进行处理

安装datatables

pip install sqlalchemy-datatables

简单使用

from datatables import ColumnDT, DataTables
from flask import  jsonify, request
from .models.user import User    # 模型
@blueprint.route('/index/data')
def index_data():
    columns = [
        ColumnDT(User.name, mData='name'),
        ColumnDT(User.age, mData='age'),
    ]   # 表示每列展示的数据
    query = db.session.query().select_from(User).group_by(User.id)  # 表示数据的来源
    params = request.args.to_dict() # 表示查询的参数
    tables = DataTables(params, query, columns) # 对数据进行处理成表格需要的
    return jsonify(tables.output_result())  # 将处理后的数据输出结果转为json格式并返回

 select_from方法表示需要查询的模型。group_by表示排序

多表查询

  • 方法1 outerjoin
from datatables import ColumnDT, DataTables
from flask import jsonify, request
from .models.user import User    # 模型
from .models.category import Category    # 模型

@blueprint.route('/index/data')
def index_data():
    columns = [
        ColumnDT(User.name, mData='name'),
        ColumnDT(User.age, mData='age'),
        ColumnDT(Category.name, mData='gender'),
    ]  # 表示每列展示的数据
    query = db.session.query().select_from(User)\
        .outerjoin(Category, Category.id == User.id).group_by(User.id)  # 表示数据的来源
    params = request.args.to_dict()  # 表示查询的参数
    tables = DataTables(params, query, columns)  # 对数据进行处理成表格需要的
    return jsonify(tables.output_result())  # 将处理后的数据输出结果转为json格式并返回

outerjoin表示连接查询。

  • 方法2 执行查询表达式
from datatables import ColumnDT, DataTables
from flask import jsonify, request
from sqlalchemy import distinct, func
from .models.user import User
from .models.category import Category


@blueprint.route('/index/data')
def index_data():
    columns = [
        ColumnDT(User.name, mData='name'),
        ColumnDT(User.age, mData='age'),
        ColumnDT(func.group_concat(distinct(Category.query.filter_by(id=User.id)[0].name)),
                 mData='gender'),
    ]  # 表示每列展示的数据
    query = db.session.query().select_from(User).group_by(User.id) # 表示数据的来源
    params = request.args.to_dict()  # 表示查询的参数
    tables = DataTables(params, query, columns)  # 对数据进行处理成表格需要的
    return jsonify(tables.output_result())  # 将处理后的数据输出结果转为json格式并返回

如果在查询过程中遇到了多个模型名相同的情况时,则可以使用flask模块中的aliased方法,表示给这个模型起一个别名。

多对多关系查询

由于在flask中,多对多关系是使用到的中间表的方法实现的,所以在使用中也依次连接即可

from datatables import ColumnDT, DataTables
from flask import jsonify, request
from sqlalchemy import distinct, func
from .models.user import User
from .models.testItemsApparatus import TestItemsApparatus
from .models.apparatus import Apparatus


@blueprint.route('/index/data')
def index_data():
    columns = [
        ColumnDT(User.name, mData='name'),
        ColumnDT(User.age, mData='age'),
        ColumnDT(func.group_concat(distinct(Apparatus.name)), global_search=False, mData='gender'),
        ColumnDT(Apparatus.name),  # 只用于过滤
    ]  # 表示每列展示的数据
    query = db.session.query().select_from(User).outerjoin(TestItemsApparatus).outerjoin(Apparatus).group_by(
        User.id)  # 表示数据的来源
    params = request.args.to_dict()  # 表示查询的参数
    tables = DataTables(params, query, columns)  # 对数据进行处理成表格需要的
    return jsonify(tables.output_result())  # 将处理后的数据输出结果转为json格式并返回

global_search=False参数表示该字段在搜索中不会使用到该字段,默认为True

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DataTables是一个强大的jQuery表格插件,它可以快速地将HTML表格转换成可排序、可搜索、可分页的数据表格。下面是DataTables插件使用步骤: 1. 引入必要的文件 首先需要在HTML文件中引入jQueryDataTables的相关文件。例如: ``` <!-- 引入 jQuery --> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <!-- 引入 DataTables --> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.25/css/jquery.dataTables.css"> <script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.js"></script> ``` 2. 创建HTML表格 在HTML文件中创建一个普通的表格,例如: ``` <table id="example"> <thead> <tr> <th>ID</th> <th>Name</th> <th>Age</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Tom</td> <td>25</td> </tr> <tr> <td>2</td> <td>Jerry</td> <td>28</td> </tr> <tr> <td>3</td> <td>Mary</td> <td>30</td> </tr> </tbody> </table> ``` 3. 初始化DataTables 使用jQuery的`DataTable()`函数初始化表格,例如: ``` $(document).ready(function() { $('#example').DataTable(); }); ``` 这样就可以将表格转换为可排序、可搜索、可分页的数据表格了。 还可以通过配置参数来定制表格的样式、功能等。例如: ``` $(document).ready(function() { $('#example').DataTable({ "paging": false, // 禁用分页 "searching": false, // 禁用搜索 "ordering": false, // 禁用排序 "info": false // 禁用信息显示 }); }); ``` 以上就是DataTables插件使用步骤,希望可以帮到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HHYZBC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值