datatable插件实现分页功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了datatable插件实现分页功能相关的知识,希望对你有一定的参考价值。

1、下载datatable插件,下载地址:http://www.datatables.club/


2、安装方法:http://www.datatables.club/manual/install.html

注意:按照官方文档的方法引入插件后会有点问题,样式也不是很美观,所以我做了修改。

由于通常djangotemplate 下的html文件使用了模板语法,所以要把CSS、JS文件放在对应的模板标签下面

下面是我的一个样例:


注意:table的id要改成“dataTables”,样式会好看一些。

id="dataTables"

DataTable_Test.html

{% extends 'common/base.html' %}
{% block css %}
    <link rel="stylesheet" type="text/css" href="/static/DataTables-1.10.15/media/css/jquery.dataTables.css">
    <link rel="stylesheet" type="text/css" href="/static/DataTables-1.10.15/media/css/dataTables.bootstrap.min.css">
{% endblock %}
{% block content %}

<div class="row">
    <div class="ibox">
        <div class="ibox-title">
{#            <h5>Uhost信息</h5>#}
            <h5 style="font-size: large">Uhost信息</h5>
        <div class="ibox-content">
            <div class="row">
                <table id="dataTables" class="table table-striped table-hover">
                <thead>
                    <tr>
                        <th class="col-lg-2">主机名称</th>
                        <th class="col-lg-2">IP地址</th>
                        <th class="col-lg-2">价格</th>
                        <th class="col-lg-2">可用区</th>
                        <th class="col-lg-2">业务组</th>
                        <th class="col-lg-2">到期时间</th>
                    </tr>
                </thead>
                <tbody>
                    {% for host in uhosts %}
                    <tr>
                        <td>{{ host.name }}</td>
                        <td>{{ host.ip }}</td>
                        <td>{{ host.price }}</td>
                        <td>{{ host.zone.name }}</td>
                        <td>{{ host.tag }}</td>
                        <td>{{ host.expiretime }}</td>
                    </tr>
                    {% endfor %}
                </tbody>
            </table>
            </div>
        </div>
        </div>
    </div>
</div>
{% endblock %}

{% block script %}
    
    <script type="text/javascript" charset="utf8" src="/static/DataTables-1.10.15/media/js/jquery.dataTables.js"></script>
    <!-- 由于base.html文件中引入了jquery.js文件所以这里要注释掉,否则可能引起函数方法冲突 -->
   <!-- <script type="text/javascript" charset="utf8" src="DataTables-1.10.15/media/js/jquery.js"></script> -->
    <script type="text/javascript" charset="utf8" src="/static/DataTables-1.10.15/media/js/dataTables.bootstrap.min.js"></script>
    <script type="text/javascript" src="/static/js/datatable_custom.js"></script>
{% endblock %}


datatable_custom.js是为了样式好看,自定义样式的一个js文件,内容如下:

/**
 * Created by cengchengpeng on 2018/1/10.
 */
$(document).ready(function () {
    $('#dataTables').DataTable({
        language: {
            "sProcessing": "处理中...",
            "sLengthMenu": "显示 _MENU_ 项结果",
            "sZeroRecords": "没有匹配结果",
            "sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
            "sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
            "sInfoFiltered": "(由 _MAX_ 项结果过滤)",
            "sInfoPostFix": "",
            "sSearch": "搜索:",
            "sUrl": "",
            "sEmptyTable": "表中数据为空",
            "sLoadingRecords": "载入中...",
            "sInfoThousands": ",",
            "oPaginate": {
                "sFirst": "首页",
                "sPrevious": "上页",
                "sNext": "下页",
                "sLast": "末页"
            },
            "oAria": {
                "sSortAscending": ": 以升序排列此列",
                "sSortDescending": ": 以降序排列此列"
            }
        }
    });
});




base.html文件

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CMDB管理</title>
    <link rel="icon" href="/static/images/bitbug_favicon.ico">
    <link href="/static/inspinia/css/bootstrap.min.css" rel="stylesheet">
    <link href="/static/inspinia/font-awesome/css/font-awesome.css" rel="stylesheet">
    <link href="/static/inspinia/css/animate.css" rel="stylesheet">
    <link href="/static/inspinia/css/style.css" rel="stylesheet">
    <link href="/static/css/css.css?v={{ verion }}" rel="stylesheet">
    {% block css %}{% endblock %}
</head>
<body>
    <div id="wrapper">
        {% include "common/menu.html" %}
        <div id="page-wrapper" class="white-bg dashbard-1">
            {% block content %}{% endblock %}
        </div>
    </div>
</body>
<script src="/static/inspinia/js/jquery-2.1.1.js"></script>
<script src="/static/inspinia/js/bootstrap.min.js"></script>
<script src="/static/inspinia/js/plugins/metisMenu/jquery.metisMenu.js"></script>
<script src="/static/inspinia/js/plugins/slimscroll/jquery.slimscroll.min.js"></script>
<script src="/static/inspinia/js/inspinia.js"></script>
<script src="/static/inspinia/js/plugins/pace/pace.min.js"></script>
<script src="/static/inspinia/js/bootstrap-typeahead.js"></script>
<script src="/static/js/jquery.numeric.js"></script>
<script src="/static/js/common.js?v={{ verion }}"></script>
<!--<script src="/static/js/workflow.js?v={{ verion }}"></script>-->
<script>
    $('#side-menu').find('li>a[href]').each(function(){
        if(location.href.indexOf($(this).attr('href').toLowerCase()) != -1){
            $(this).closest('li').addClass('active');
        }
    });
    $('#foldPage').click(function(){
        var fold = $(this).data('fold');
        var $div = $('#accordion div[id]');
        if(fold == "0"){
            $div.addClass('in').removeAttr('style');
            $(this).data('fold', 1);
        }
        else{
            $div.removeClass('in');
            $(this).data('fold', 0);
        }
    });
</script>
{% block script %}{% endblock %}
</html>


效果:

技术分享图片


每页显示多少行结果也可以通过修改js文件来调整



以上是关于datatable插件实现分页功能的主要内容,如果未能解决你的问题,请参考以下文章

用DataTables实现服务器端分页

jquery datatable如何动态分页

实现DataTables搜索框查询结果高亮显示

使用jQuery开发datatable分页表格插件

基于bootstrap + php +ajax datatable 插件的使用

datatables后端分页