基于bootstrap的分页以及表格的动态搜索
一、需求:有时候我们需要做数据的展示,通过表格的方式展示。这里涉及到数据的展示、搜索。
二、组件:
我们使用bootstrap的table插件来完成我们的需求。分页、搜索。
官方地址:
Bootstrap中文网:http://www.bootcss.com/
Bootstrap Table Demo:http://issues.wenzhixin.net.cn/bootstrap-table/index.html
Bootstrap Table API:http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/
Bootstrap Table源码:https://github.com/wenzhixin/bootstrap-table
Bootstrap DataPicker:http://www.bootcss.com/p/bootstrap-datetimepicker/
Boostrap Table 扩展API:http://bootstrap-table.wenzhixin.net.cn/extensions/
三、使用。
1、导入js
1 <script src="/static/js/jquery-2.1.1.min.js"></script> 2 <script src="/static/js/bootstrap.min.js"></script> 3 <script src="/static/plugins/fast-click/fastclick.min.js"></script> 4 <script src="/static/plugins/bootstrap-table/bootstrap-table.min.js"></script>
2、html代码:
1 <div class="panel"> 2 {# <div class="panel-heading">#} 3 {# <h3 class="panel-title">服务器信息展示</h3>#} 4 {# </div>#} 5 <div class="panel-body"> 6 <table data-toggle="table" 7 data-url="/cmdb_back_data/" 8 data-search="true" 9 data-data-type="json" 10 data-show-refresh="true" 11 data-show-toggle="true" 12 data-show-columns="true" 13 data-sort-name="id" 14 data-page-list="[10, 15, 20]" 15 data-page-size="10" 16 data-pagination="true" data-show-pagination-switch="true"> 17 <thead> 18 <tr> 19 <th data-field="id" data-sortable="true" data-formatter="invoiceFormatter">ID</th> 20 <th data-field="docker_ip" data-sortable="true">容器IP</th> 21 <th data-field="server_ip" data-sortable="true" data-formatter="dateFormatter">服务器IP</th> 22 <th data-field="department" data-align="center" data-sortable="true" data-sorter="priceSorter">所属部门</th> 23 <th data-field="app_name" data-align="center" data-sortable="true" data-formatter="statusFormatter">所属应用</th> 24 <th data-field="app_owner" data-align="center" data-sortable="true" data-formatter="trackFormatter">应用负责人</th> 25 </tr> 26 </thead> 27 </table> 28 </div> 29 </div> 30 <!--===================================================-->
3、介绍html中代码的含义:
-
data-url= 服务器端请求的数据的数据的地址。
-
data-search 是否启用搜索框。
-
data-data-type 服务器端数据返回是json
-
data-show-refresh 是否显示刷新按钮
-
data-show-toggle 是否显示 切换试图(table/card)按钮
-
data-show-columns 是否显示内容列的下拉框
-
data-sort-name 定义排序列,通过url方式获取数据填写字段名,否则填写下标
-
data-sort-name 自定义排序 字段。
-
data-page-list 如果设置了分页,设置可供选择的页面数据条数。设置为All 则显示所有记录。
-
data-page-size 如果设置了分页,页面数据条数
-
data-pagination 设置为true会在表格底部显示分页条 -
data-show-pagination-switch是否显示 数据条数选择框 -
data-field 字段名字。
-
data-side-pagination="server" 分页是在客户端还是服务端。默认是'client'在客户端。需要注意的是:我们分页一般都在服务器端进行分页!!!! 不要在客户端分页,如果数据量较大的话,浏览器加载耗时较长! - 更多请看:http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/
四、后端需要传过来一个json串,以key:value形式以data-field为key。
后端代码,前端分页代码:
1 def cmdb_back_data(request): 2 list_info = [] 3 limit_pag = request.GET.get('limit', None) # 页面的显示的数据条目。 4 offset_index = request.GET.get('offset', None) # 页面的显示索引。 5 docker_ip = request.GET.get('docker_ip', None) # 容器IP。 6 server_ip = request.GET.get('server_ip', None) # 物理机IP。 7 offset_index_session = request.session.get('offset_index') 8 docker_obj = models.Docker.objects.all() 9 dep_info = {0: '广告', 1: '客服'} 10 for i in docker_obj: 11 dict_temp = {} 12 dict_temp['id']=i.id 13 dict_temp['docker_ip'] = i.docker_ip 14 server_ip_obj = models.Server.objects.filter(id=i.phy_ip_id).first() 15 server_ip = server_ip_obj.server_ip 16 dict_temp['server_ip'] = server_ip 17 dict_temp['department'] = dep_info[i.department] 18 dict_temp['app_owner'] = i.app_owner 19 dict_temp['app_name'] = i.app_name 20 list_info.append(dict_temp) 21 # print(retu_dict) 22 return HttpResponse(json.dumps(list_info))
后端代码,后端分页:
1 def cmdb_back_data(request): 2 list_info = [] 3 limit_pag = request.GET.get('limit', None) # 页面的显示的数据条目。 4 offset_index = request.GET.get('offset', None) # 页面的显示索引。 5 docker_ip = request.GET.get('docker_ip', None) # 容器IP。 6 server_ip = request.GET.get('server_ip', None) # 物理机IP。 7 offset_index_session = request.session.get('offset_index') 8 docker_obj = models.Docker.objects.all() 9 dep_info = {0: '广告', 1: '客服'} 10 for i in docker_obj: 11 dict_temp = {} 12 dict_temp['id']=i.id 13 dict_temp['docker_ip'] = i.docker_ip 14 server_ip_obj = models.Server.objects.filter(id=i.phy_ip_id).first() 15 server_ip = server_ip_obj.server_ip 16 dict_temp['server_ip'] = server_ip 17 dict_temp['department'] = dep_info[i.department] 18 dict_temp['app_owner'] = i.app_owner 19 dict_temp['app_name'] = i.app_name 20 list_info.append(dict_temp) 21 total = docker_obj.count() 22 rows = list_info[int(offset_index):int(limit_pag) + int(offset_index)] 23 retu_dict = {'rows': rows, 'total': total} 24 # print(retu_dict) 25 return HttpResponse(json.dumps(retu_dict))
效果:

可以动态的查询,我们要搜索内容~!
注意:
- 分页分2种,默认情况是前端分页。前端分页需要后端传一个和前端字段定义一样的可迭代的列表。
- 前端分页可以实现动态查询 排序,后端分页,不支持排序和动态查询。如果数据量不大的话,可以用前端分页。
学习是一种态度,坚持是质变的利器!

浙公网安备 33010602011771号