evilliu

  之前做的分页,是自己后端写一堆代码,返回给前端页面显示,感觉比较繁重、不灵活。今天研究下基于bootstrap的做的插件,整理如下:

 在使用bootstrap的插件的时候,需要导入一些css、js。

1     <link href="/static/css/bootstrap.min.css" rel="stylesheet">
2     <script src="/static/js/jquery-2.1.1.min.js"></script>
3     <script src="/static/js/bootstrap.min.js"></script>
4     <script src="/static/js/bootstrap-paginator.js"></script>

 注意:js的导入顺序,jquery优先导入并且版本要2.x。中文乱码:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

其中:bootstrap-paginator.js下载的地址:https://github.com/lyonlai/bootstrap-paginator  在GitHub上进行下载。

html代码:

1 <div id="example" style="text-align: center"> <ul id="pageLimit"></ul> </div>

 

js代码:

 1 <script>
 2     $(\'#pageLimit\').bootstrapPaginator({
 3     currentPage: 1,//当前的请求页面。
 4     totalPages: 20,//一共多少页。
 5     size:"normal",//应该是页眉的大小。
 6     bootstrapMajorVersion: 3,//bootstrap的版本要求。
 7     alignment:"right",
 8     numberOfPages:5,//一页列出多少数据。
 9     itemTexts: function (type, page, current) {//如下的代码是将页眉显示的中文显示我们自定义的中文。
10         switch (type) {
11         case "first": return "首页";
12         case "prev": return "上一页";
13         case "next": return "下一页";
14         case "last": return "末页";
15         case "page": return page;
16         }
17     }
18 });
19 </script>

 

效果:

点击不同的页显示高亮蓝。

 让我们一起看下bootstrap的文档介绍:

咱们在引用这个插件的时候需要做以下操作:

后端需要传来数据的可以进行分割多少个页:

 1 def task_list_page(request):
 2     \'\'\'
 3     功能:该函数主要是起到分页的作用。
 4     :param request: 用户请求的对象,
 5     :return: 返回前端数据或者页数。
 6     \'\'\'
 7     page_dic={\'page_content\':None,\'page_count\':None}
 8     if request.method==\'POST\':
 9         page_num=request.POST.get(\'page\',None)
10         data_count=request.POST.get(\'count\',None)
11         print(page_num,data_count)
12         # pagesplit_obj=pagesplit.Pager(page_num)
13         page_end=int(page_num)*int(data_count)
14         page_start=page_end -int(data_count)
15         query_obj=models.Task_info.objects.all()[page_start:page_end]
16         page_count=models.Task_info.objects.count()
17         page_cont_str=\'\'
18         for i in query_obj:
19             page_cont_str+=\'\'\'
20             <tr>
21             <td>%s</td>
22             <td>%s</td>
23             <td>%s</td>
24             <td><a href="/res_query_check/%s">点击查看任务结果</a></td> </tr>
25             \'\'\'%(i.id,i.task_name,i.task_user,i.id)
26         page_dic[\'page_content\']=page_cont_str
27         page_dic[\'page_count\']=page_count
28         return  HttpResponse(json.dumps(page_dic))
29     elif request.method==\'GET\':
30         page_count = models.Task_info.objects.count()
31         x,y=divmod(page_count,12)
32         if y:
33             page_num=x+1
34         else:
35             page_num=x
36         return render(request,\'task/task_list.html\',{\'pagecount\':page_num})#传递数据一共分多少页。

 

前端js显示页数:

自执行,请求默认第一页数据:

 1     $(function () {
 2         $.ajax(
 3                 {
 4                     url:\'/task_list_page/\',
 5                     type:\'POST\',
 6                     data:{\'page\':1,\'count\':12},
 7                     dataType:\'JSON\',
 8                     success:function (callback) {
 9                         var page_count=callback.page_count;
10                         var page_cont=callback.page_content;
11                         $(\'tbody\').append(page_cont);
12                         $(\'#last_page\').text(page_count)
13                     }
14                 }
15         )
16     });

 注意:$(\'#last_page\').text(page_count)使用的是:id为:last_page

前端代码:

数据:

 1                                 <table class="table">
 2                                     <thead>
 3                                         <tr>
 4 {#                                            <th class="text-center">#</th>#}
 5                                             <th>任务ID</th>
 6                                             <th>任务名称</th>
 7                                             <th>执行用户</th>
 8                                             <th>执行结果</th>
 9                                         </tr>
10                                     </thead>
11 
12                                     <tbody>
13                                     </tbody>
14                                 </table>

 

 分页:

1  <div id="example" style="text-align: center"> <ul id="pageLimit"></ul> </div>

 

 js代码:

 1     $(\'#pageLimit\').bootstrapPaginator({
 2     currentPage: 1,
 3     totalPages: {{ pagecount }},
 4     size:"normal",
 5     bootstrapMajorVersion: 3,
 6     alignment:"right",
 7     numberOfPages:8,
 8     itemTexts: function (type, page, current) {
 9         switch (type) {
10         case "first": return "首页";
11         case "prev": return "上一页";
12         case "next": return "下一页";
13         case "last": return "末页";
14         case "page": return page;
15         }//默认显示的是第一页。
16     },
17         onPageClicked: function (event, originalEvent, type, page){//给每个页眉绑定一个事件,其实就是ajax请求,其中page变量为当前点击的页上的数字。
18             $.ajax({
19                 url:\'/task_list_page/\',
20                 type:\'POST\',
21                 data:{\'page\':page,\'count\':12},
22                 dataType:\'JSON\',
23                 success:function (callback) {
24                         $(\'tbody\').empty();
25                         var page_count=callback.page_count;
26                         var page_cont=callback.page_content;
27                         $(\'tbody\').append(page_cont);
28                         $(\'#last_page\').text(page_count)
29                     }
30             })
31         }
32 });

 

效果:

 

分类:

技术点:

相关文章: