django:bootstrap table加載django返回的數據


 bootstrap table加載表格數據有兩類方式:

一種通過data屬性的方式配置,一種是javascipt方式配置

這里看js配置方式:

  1、當數據源為.json文件時

    url參數寫上json文件的地址就行,但是json文件格式必須為json格式(2種):

    a:一種為json數組格式 [{"id": 0,"name": "Item 0","price": "$0"},{"id": 1,"name": "Item 1","price": "$1"}],同時sidePagination 需要為client或者直接注釋掉該參數,只有這樣前台的分頁插件才能正常工作;

      但是不能為server,否則前台提示:沒有找到匹配的記錄

[  
        {  
            "id": 0,  
            "name": "Item 0",  
            "price": "$0"  
        },  
        {  
            "id": 1,  
            "name": "Item 1",  
            "price": "$1"  
        }  
    ]  

 

 

    b:另一種為json對象格式,必須要有total和rows兩個key,{"total": 2,"rows": [{"id": 0,"name": "Item 0","price": "$0"},{"id": 1,"name": "Item 1","price": "$1"}]},

且鍵的名字必須與下方columns的field值一樣,才能讀取到數據,同時 sidePagination 參數必須要為server,但是如果后台沒有處理的話,前台會在第一頁顯示全部數據,為client時,前台會提示:沒有找到匹配的記錄。

 

{
    "total": 2,
    "rows": [
        {
            "id": 0,
            "name": "Item 0",
            "price": "$0"
        },
        {
            "id": 1,
            "name": "Item 1",
            "price": "$1"
        }
    ]
}

 

 

{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
 <head>
        <meta charset="UTF-8" />
        <title>項目列表</title>

        <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
        <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
        <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
        <link href="https://cdn.bootcss.com/bootstrap-table/1.11.1/bootstrap-table.min.css" rel="stylesheet">
        <script src="https://cdn.bootcss.com/bootstrap-table/1.11.1/bootstrap-table.min.js"></script>
        <script src="https://cdn.bootcss.com/bootstrap-table/1.11.1/locale/bootstrap-table-zh-CN.min.js"></script>

 </head>

    <body>
        <table id="mytab" class="table table-hover"></table>
    </body>

        <script>
          var aaa = JSON.parse('{{ datalist|safe }}');
            alert(aaa);
        </script>

        <script type="text/javascript">

            {#var Datalist ='{{ datalist|safe }}'; // 獲取后台傳來的數據需要加上safe過濾#}
            {#datalist= [[93,93,0,100.0],[20,23,26,29]]#}
            var aaa = JSON.parse('{{ datalist|safe }}');
            alert(aaa);


                    $('#mytab').bootstrapTable({
                        {#全部參數#}
                        url: "{% static 'guchen_array.json' %}",         //請求后台的URL(*)或者外部json文件,json內容為json數組[{"id": 0,"name": "Item 0","price": "$0"},{"id": 1,"name": "Item 1","price": "$1"}]
                                                                        //且鍵的名字必須與下方columns的field值一樣,同時sidePagination需要設置為client或者直接注釋掉,這樣前台才能讀取到數據,且分頁正常。
                                           //當json文件內容為:{"total": 2,"rows": [{"id": 0,"name": "Item 0","price": "$0"},{"id": 1,"name": "Item 1","price": "$1"}]}時,
                                           //分頁要寫為server,但是server如果沒有處理的話,會在第一頁顯示所有的數據,分頁插件不會起作用
              
              {#url: "{% static 'guchen_obj.json' %}",#}
              
dataType: "json", method: 'get', //請求方式(*) toolbar: '#toolbar', //工具按鈕用哪個容器 striped: true, //是否顯示行間隔色 cache: false, //是否使用緩存,默認為true,所以一般情況下需要設置一下這個屬性(*) pagination: true, //是否顯示分頁(*) sortable: true, //是否啟用排序 sortOrder: "asc", //排序方式 {#queryParams: oTableInit.queryParams,//傳遞參數(*)#} sidePagination: "client", //分頁方式:client客戶端分頁,server服務端分頁(*) pageNumber: 1, //初始化加載第一頁,默認第一頁 pageSize: 10, //每頁的記錄行數(*) pageList: [10, 25, 50, 100], //可供選擇的每頁的行數(*) search: true, //是否顯示表格搜索,此搜索是客戶端搜索,不會進服務端,所以,個人感覺意義不大 strictSearch: true, showColumns: true, //是否顯示所有的列 showRefresh: true, //是否顯示刷新按鈕 minimumCountColumns: 2, //最少允許的列數 clickToSelect: true, //是否啟用點擊選中行 {#height: 500, //行高,如果沒有設置height屬性,表格自動根據記錄條數覺得表格高度#} uniqueId: "ID", //每一行的唯一標識,一般為主鍵列 showToggle: false, //是否顯示詳細視圖和列表視圖的切換按鈕 cardView: false, //是否顯示詳細視圖 detailView: true, //是否顯示父子表 columns: [ { field: 'id', title: '項目名' }, { field: 'name', title: '數據庫表名' }, { field: 'price', title: '總數' }, { field: 'operate', title: '操作', width: 120, align: 'center', valign: 'middle', formatter: actionFormatter, }, ],//操作欄的格式化 function actionFormatter(value, row, index) { var id = value; var result = ""; result += "<a href='javascript:;' class='btn btn-xs green' onclick=\"EditViewById('" + id + "', view='view')\" title='查看'><span class='glyphicon glyphicon-search'></span></a>"; result += "<a href='javascript:;' class='btn btn-xs blue' onclick=\"EditViewById('" + id + "')\" title='編輯'><span class='glyphicon glyphicon-pencil'></span></a>"; result += "<a href='javascript:;' class='btn btn-xs red' onclick=\"DeleteByIds('" + id + "')\" title='刪除'><span class='glyphicon glyphicon-remove'></span></a>"; return result; } </script> </html>

頁面展示如下:

 

 下一步將外部json文件修改為使用django后台傳遞的數據。

   2、當數據源為django后台返回時

  改動只有url參數變了。

{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
 <head>
        <meta charset="UTF-8" />
        <title>項目列表</title>

        <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
        <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
        <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
        <link href="https://cdn.bootcss.com/bootstrap-table/1.11.1/bootstrap-table.min.css" rel="stylesheet">
        <script src="https://cdn.bootcss.com/bootstrap-table/1.11.1/bootstrap-table.min.js"></script>
        <script src="https://cdn.bootcss.com/bootstrap-table/1.11.1/locale/bootstrap-table-zh-CN.min.js"></script>

 </head>

    <body>
        <table id="mytab" class="table table-hover"></table>
    </body>

{#        <script>#}
          {#var aaa = JSON.parse('{{ datalist|safe }}');#}
{#          aaa = {{ datalist|safe }}#}
{#            alert(aaa[0]);#}
{#        </script>#}

        <script type="text/javascript">

            {#var Datalist ='{{ datalist|safe }}'; // 獲取后台傳來的數據需要加上safe過濾#}
            {#datalist= [[93,93,0,100.0],[20,23,26,29]]#}
            var aaa = JSON.parse('{{ datalist|safe }}');
            alert(aaa);


                    $('#mytab').bootstrapTable({
                        {#全部參數#}
                        {#url: "{% static 'guchen1.json' %}",         //請求后台的URL(*)或者外部json文件,json內容必須為json數組[{"id": 0,"name": "Item 0","price": "$0"},{"id": 1,"name": "Item 1","price": "$1"}]#}
                        {#                                                //且鍵的名字必須與下方columns的field值一樣,才能讀取到數據#}
                        url:"http://127.0.0.1:8000/getdata",
                        dataType: "json",
                        method: 'get',                      //請求方式(*)
                        toolbar: '#toolbar',                //工具按鈕用哪個容器
                        striped: true,                      //是否顯示行間隔色
                        cache: false,                       //是否使用緩存,默認為true,所以一般情況下需要設置一下這個屬性(*)
                        pagination: true,                   //是否顯示分頁(*)
                        sortable: true,                     //是否啟用排序
                        sortOrder: "asc",                   //排序方式
                        {#queryParams: oTableInit.queryParams,//傳遞參數(*)#}
                        sidePagination: "server",           //分頁方式:client客戶端分頁,server服務端分頁(*)
                        pageNumber: 1,                       //初始化加載第一頁,默認第一頁
                        pageSize: 10,                       //每頁的記錄行數(*)
                        pageList: [10, 25, 50, 100],        //可供選擇的每頁的行數(*)
                        search: true,                       //是否顯示表格搜索,此搜索是客戶端搜索,不會進服務端,所以,個人感覺意義不大
                        strictSearch: true,
                        showColumns: true,                  //是否顯示所有的列
                        showRefresh: true,                  //是否顯示刷新按鈕
                        minimumCountColumns: 2,             //最少允許的列數
                        clickToSelect: true,                //是否啟用點擊選中行
                        {#height: 500,                        //行高,如果沒有設置height屬性,表格自動根據記錄條數覺得表格高度#}
                        uniqueId: "ID",                     //每一行的唯一標識,一般為主鍵列
                        showToggle: false,                    //是否顯示詳細視圖和列表視圖的切換按鈕
                        cardView: false,                    //是否顯示詳細視圖
                        detailView: true,                   //是否顯示父子表

                        columns: [
                            {
                                field: 'id',        //返回數據rows數組中的每個字典的鍵名與此處的field值要保持一致
                                title: '項目名'
                            },
                            {
                                field: 'name',
                                title: '數據庫表名'
                            },
                            {
                                field: 'price',
                                title: '總數'
                            },
                            {
                                field: 'operate',
                                title: '操作',
                                width: 120,
                                align: 'center',
                                valign: 'middle',
                                formatter: actionFormatter,
                             },

                        ],

                    });


                //操作欄的格式化
                function actionFormatter(value, row, index) {
                    var id = value;
                    var result = "";
                    result += "<a href='javascript:;' class='btn btn-xs green' onclick=\"EditViewById('" + id + "', view='view')\" title='查看'><span class='glyphicon glyphicon-search'></span></a>";
                    result += "<a href='javascript:;' class='btn btn-xs blue' onclick=\"EditViewById('" + id + "')\" title='編輯'><span class='glyphicon glyphicon-pencil'></span></a>";
                    result += "<a href='javascript:;' class='btn btn-xs red' onclick=\"DeleteByIds('" + id + "')\" title='刪除'><span class='glyphicon glyphicon-remove'></span></a>";
                    return result;
                }
        </script>


</html>

 

這里要注意的是django后台的返回必須是json,且必須要有total和rows兩個key,同樣rows中的鍵名需要與columns中的fileds值一樣

def getdata(request):
    datalist = {
        "total": 3,
        "rows": [{
            "id": 1,
            "name": "mdm",
            "price": 200
        }]
    }
    return HttpResponse(json.dumps(datalist))

 

注意:這里加載表格頁面用的是/bootstrapTable這個url,獲取表格數據用的是getdata這個視圖

url(r'^bootstrapTable/',views.bootstrapTable),
url(r'^getdata/',views.getdata),

 參考:https://www.jianshu.com/p/b5ca011a0d9c


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM