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