基於bootstrap的分頁插件


  之前做的分頁,是自己后端寫一堆代碼,返回給前端頁面顯示,感覺比較繁重、不靈活。今天研究下基於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 });

 

效果:

 


免責聲明!

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



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