CMDB-表格组件搜索+分页

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.min.css">
 7 </head>
 8 <body>
 9     <div style="margin: 0 auto;width: 900px;position:relative;">
10         <h1>资产列表</h1>
11         <div class="row" style="position:absolute;left: 0;">
12 {#            <form class="navbar-form navbar-left" role="search" style="padding: 0;">#}
13                 <div class="bs-example " style="float: left; margin-bottom: 10px" >
14                     <button id="idCheckAll" type="button"  class="btn btn-default">全选</button>
15                     <button id="idReversAll" type="button" class="btn btn-default">反选</button>
16                     <button id="idCancelAll" type="button" class="btn btn-default">取消</button>
17                     <button id="idEdit" type="button" class="btn btn-default">批量编辑</button>
18                     <button id="idDelete" type="button" class="btn btn-default">批量删除</button>
19                     <button id="idSave" type="button" class="btn btn-default">保存</button>
20                 </div>
21 
22                 <div style="float: right;position:absolute;right: 0;width: 300px;text-align: right">
23                     <input id="idInput"  type="text" class="form-control" placeholder="Search" style="width:230px;float: left;margin-right: 10px">
24                     <button id="idSearch" type="button" class="btn btn-default" style="width: 60px">搜索</button>
25                 </div>
26 {#            </form>#}
27             <table class="table table-bordered">
28                 <thead id="table_th"></thead>
29                 <tbody id="table_td"></tbody>
30             </table>
31             <nav aria-label="Page navigation">
32                 <ul id="idPagination" class="pagination">
33 
34                 </ul>
35             </nav>
36         </div>
37     </div>
38     <script src="/static/js/jquery-3.1.1.js"></script>
39     <script src="/static/js/NBlist.js"></script>
40     <script>
41         $(function () {
42             $.NB("{% url 'datajson' %}");
43             $.ChangePager();
44         })
45     </script>
46 </body>
47 
48 </html>
html
  1 /**
  2  * Created by Administrator on 2018-12-02.
  3  */
  4 (function () {
  5     /*进入编辑模式*/
  6     function IntoEdit($currentr) {
  7         $currentr.addClass('success');
  8         $currentr.attr('isedit','true');
  9         //循环tr得每个td属性
 10         $currentr.children().each(function () {
 11             var EditEnable = $(this).attr('edit-enable');
 12             var EditType = $(this).attr('edit-type');
 13             //可以编辑
 14             if(EditEnable == 'true'){
 15                 if(EditType == 'select'){
 16                     //下拉框
 17                     var globalName = $(this).attr('global-name');
 18                     var old_val = $(this).attr('old_val'); //数据库id
 19                     //生成select标签
 20                     var sel = document.createElement('select');
 21                     $.each(window[globalName],function (k1,v1) {
 22                         var op = document.createElement('option');
 23                         op.setAttribute('value',v1[0]);
 24                         op.innerHTML = v1[1];
 25                         $(sel).append(op);
 26                     });
 27                     sel.className = "form-control";
 28                     //select 默认值
 29                     $(sel).val(old_val);
 30                     $(this).html(sel);
 31 
 32                     //文本框
 33                 }else if(EditType == 'input'){
 34                     // 获取文本值
 35                     var innerText = $(this).text();
 36                     //创建input
 37                     var tag = document.createElement('input');
 38                     //为input赋值
 39                     tag.className = "form-control";
 40                     tag.value = innerText;
 41                     $(this).html(tag);
 42                 }
 43             }
 44         })
 45     }
 46     /*退出编辑模式*/
 47     function OutEdit($currentr) {
 48         $currentr.removeClass('success');
 49         $currentr.children().each(function () {
 50             var EditEnable = $(this).attr('edit-enable');
 51             var editType = $(this).attr('edit-type');
 52             if(EditEnable == 'true'){
 53                 if (editType == 'select'){
 54                     //获取正在编辑的selected对象
 55                     var $select = $(this).children().first();
 56                     //获取选中的option的value
 57                     var newId = $select.val();
 58                     //获取选中的option文本内容
 59                     var newText = $select[0].selectedOptions[0].innerHTML;
 60                     //在td中设置文本内容
 61                     $(this).html(newText);
 62                     //将新值添加到属性中
 63                     $(this).attr('new-val',newId);
 64 
 65                 }else if(editType == 'input'){
 66                     //退出编辑模式
 67                     var inputvalue = $(this).children().first().val();
 68                     //在td中设置文本内容
 69                     $(this).html(inputvalue);
 70                     //将新值添加到属性中
 71                     $(this).attr('new-val',inputvalue);
 72                 }
 73             }
 74         })
 75     }
 76     /*编辑模式*/
 77     function bindEdit() {
 78         $('#idEdit').click(function () {
 79             var editing =$('#idEdit').hasClass("btn-warning");
 80             if (editing){
 81                 //退出编辑
 82                 $('#idEdit').removeClass("btn-warning");
 83                 $('#idEdit').text('批量编辑');
 84                 $('#table_td').find(':checked').each(function () {
 85                     var $currentr = $(this).parent().parent();
 86                     OutEdit($currentr);
 87                 })
 88             }else {
 89                 //进入编辑
 90                 $('#idEdit').addClass("btn-warning");
 91                 $('#idEdit').text('退出编辑');
 92                 $('#table_td').find(':checked').each(function () {
 93                     var $currentr = $(this).parent().parent();
 94                     IntoEdit($currentr);
 95                 })
 96             }
 97         })
 98     }
 99     /*绑定复选框*/
100     function bindCheckBox() {
101         $('#table_td').on('click',':checkbox',function () {
102             var isEdit = $('#idEdit').hasClass('btn-warning');
103             if (isEdit){
104                 var ck = $(this).prop('checked');
105                 var $currentr = $(this).parent().parent();
106                 if(ck){
107                     //  进入编辑
108                     IntoEdit($currentr);
109                 }else {
110                     //退出编辑
111                     OutEdit($currentr);
112                 }
113             }else {
114 
115             }
116         })
117     }
118     /*全选*/
119     function IsCheckAll() {
120         $('#idCheckAll').click(function () {
121             $('#table_td').find(':checkbox').each(function () {
122                 if($('#idEdit').hasClass('btn-warning')){
123                     if($(this).prop('checked')){
124                         //已经进入编辑模式了
125                     }else {
126                         //进入编辑模式
127                         var $currentr = $(this).parent().parent();
128                         IntoEdit($currentr);
129                         $(this).prop('checked',true);
130                     }
131                 }else {
132                     $(this).prop('checked',true);
133                 }
134             })
135         })
136     }
137     /*取消*/
138     function IsCancelAll() {
139         $('#idCancelAll').click(function () {
140             $('#table_td').find(':checked').each(function () {
141                 if($('#idEdit').hasClass('btn-warning')){
142                     $(this).prop('checked',false);
143                     //退出编辑模式
144                     var $currentr = $(this).parent().parent();
145                     OutEdit($currentr);
146                 }else {
147                     $(this).prop('checked',false);
148                 }
149             })
150         })
151     }
152     /*反选*/
153     function IsReversAll() {
154         $('#idReversAll').click(function () {
155             $('#table_td').find(':checkbox').each(function () {
156                 if($('#idEdit').hasClass('btn-warning')){
157                     if($(this).prop('checked')){
158                         $(this).prop('checked',false);
159                         var $currentr = $(this).parent().parent();
160                         OutEdit($currentr);
161                     }else {
162                         $(this).prop('checked',true);
163                         var $currentr = $(this).parent().parent();
164                         IntoEdit($currentr);
165                     }
166                 }else {
167                     if($(this).prop('checked')){
168                         $(this).prop('checked',false);
169                     }else {
170                         $(this).prop('checked',true);
171                     }
172                 }
173             })
174         })
175     }
176     /*保存*/
177     function bindSave() {
178         $('#idSave').click(function () {
179             var postList = [];
180             //找到编辑过得tr 属性isedit="true"
181             $('#table_td').find('tr[isedit="true"]').each(function () {
182                 var temp = {};
183                 var row_id = $(this).attr('row-id'); //数据库对应id
184                 temp['id'] = row_id;
185                 $(this).children('[edit-enable="true"]').each(function () {
186                     var name = $(this).attr('name');
187                     var old_val = $(this).attr('old_val');
188                     var new_val = $(this).attr('new-val');
189                     if(old_val != new_val) {
190                         temp[name] = new_val;
191                     }
192                 });
193                 postList.push(temp);
194             });
195 
196             $.ajax({
197                 url:DataJsonUrl,
198                 type:'POST',
199                 data:{'type':'update','post_list':JSON.stringify(postList),csrfmiddlewaretoken: '{{ csrf_token }}'},
200                 dataType:'JSON',
201                 success:function (arg) {
202                     if(arg.status){
203                         init(1);
204                         console.log(arg.message);
205                     }else {
206                         console.log(arg.message);
207                     }
208                 }
209             })
210         })
211     }
212     /*删除*/
213     function bindDel() {
214         $('#idDelete').click(function () {
215             $('#table_td').find(':checked').each(function () {
216                 //var row_id = $(this).attr('row-id'); //数据库对应id
217                 var row_id = $(this).parent().parent().attr("row-id");
218 
219                 $.ajax({
220                     url:DataJsonUrl,
221                     type:'POST',
222                     data:{'type':'delete','post_list':row_id,csrfmiddlewaretoken: '{{ csrf_token }}'},
223                     dataType:'JSON',
224                     success:function (arg) {
225                         if(arg.status){
226                             init();
227                             console.log(arg.message);
228                         }else {
229                             console.log(arg.message);
230                         }
231                     }
232                 })
233             })
234         })
235 
236     }
237 
238 
239     /*自定义格式化方法*/
240     String.prototype.format = function (kwargs) {
241         //this "ceshiceshi:{age}-{gender}"
242         //kwargs {'age':18,'gender':'女'}
243 
244         var ret = this.replace(/\{(\w+)\}/g,function (km,m) {
245             return kwargs[m]
246         });
247         return ret
248     };
249     /*初始化*/
250     function init(pager,input_name) {
251             $.ajax({
252             url:DataJsonUrl,
253             type:'GET',
254             data:{'pager':pager,'data_list':input_name},
255             dataType:'JSON',
256             success:function (result) {
257                 initGlobalData(result.global_dict);
258                 initHeader(result.table_config);
259                 initBody(result.table_config,result.data_list);
260                 initPager(result.pager);
261                 }
262         });
263     }
264     /*生成表头*/
265     function initHeader(table_config) {
266         /*创建tr标签*/
267        var tr = document.createElement('tr');
268         /*创建tr下th标签并取值*/
269        $.each(table_config,function (k,item) {
270            if (item.display){
271                var th = document.createElement('th');
272                th.innerHTML = item.title;
273                $(tr).append(th);
274            }
275        });
276        $('#table_th').empty();
277        $('#table_th').append(tr);
278     }
279     /*生成数据*/
280     function initBody(table_config,data_list) {
281        $('#table_td').empty();
282        $.each(data_list,function (k,row) {
283            /*创建tr标签*/
284            var tr = document.createElement('tr');
285            tr.setAttribute('row-id',row['id']);
286                 /*根据配置文件显示字段*/
287                 $.each(table_config,function (i,colConfig) {
288                     if(colConfig.display){
289                         var td = document.createElement('td');
290                         //对colConfig.text.kwargs去@重写
291                         //生成文本信息
292                         var kwargs = {};
293                         $.each(colConfig.text.kwargs,function (key,value) {
294                             if(value.substring(0,2) == '@@'){
295                                 var global_name = value.substring(2,value.length); //全局变量名称
296                                 var global_id = row[colConfig.q]; //获取数据库数字类型的值
297                                 var temp_id = GetTextFromGlobalById(global_name,global_id);
298                                 kwargs[key] = temp_id
299                             }
300                             else if(value[0]=='@'){
301                                 kwargs[key] = row[value.substring(1,value.length)]; //数据库里的字段.使用row[]
302                             }else {
303                                 kwargs[key] = value; //配置文件默认值
304                             }
305                         });
306                         var temp = colConfig.text.content.format(kwargs);
307                         td.innerHTML = temp;
308                         //设置属性colConfig.attr
309                         $.each(colConfig.attr,function (kk,vv) {
310                             //处理attr里得origin带@得数值
311                             if(vv[0]=='@'){
312                                 td.setAttribute(kk,row[vv.substring(1,vv.length)]);
313                             }else {
314                                 td.setAttribute(kk,vv);
315                             }
316                         });
317 
318                         $(tr).append(td)
319                     }
320                 });
321            $('#table_td').append(tr);
322        });
323     }
324     /*设置全局变量*/
325     function initGlobalData(global_dict) {
326         $.each(global_dict,function (k,v) {
327             window[k] = v;  //设置为全局变量
328         })
329     }
330     /*设置数据库内存数据*/
331     function GetTextFromGlobalById(global_name,global_id) {
332         var ret =null;
333         $.each(window[global_name],function (k,item) {
334             if(item[0] == global_id){
335                 ret = item[1];
336                 return
337             }
338         });
339         return ret;
340     }
341     /*页码改变*/
342     function bindChangePager() {
343         $('#idPagination').on('click','a',function () {
344             var num = $(this).attr('pnum');
345             var input_name = $('#idInput').val();
346             init(num,input_name);
347         })
348     }
349     /*分页*/
350     function initPager(pager) {
351         $('#idPagination').html(pager);
352     }
353     
354     function bindsearch() {
355         $('#idSearch').click(function () {
356             var input_name = $('#idInput').val();
357             init(1,input_name)
358         })
359     }
360 
361     function bindInput() {
362         $("#idInput").keypress(function (e) {
363                 if (e.keyCode == "13") {
364                     var input_name = $('#idInput').val();
365                     init(1,input_name)
366                 }
367         });
368     }
369 
370     /*初始加载数据*/
371         jQuery.extend({
372             'NB': function (url) {
373                 DataJsonUrl = url;
374                 init();
375                 bindEdit();
376                 bindCheckBox();
377                 IsCheckAll();
378                 IsCancelAll();
379                 IsReversAll();
380                 bindSave();
381                 bindDel();
382                 bindChangePager();
383                 bindsearch();
384                 bindInput();
385             },
386             'ChangePager':function (num,input_name) {
387                 init(num,input_name);
388             }
389         })
390 })();
nb.js

后端:

1 from django.urls import path
2 from webdemo import views
3 urlpatterns = [
4     path('', views.index),
5     path('datajson/', views.datajson,name='datajson'),
6 
7 ]
urls
 1 class Asset(models.Model):
 2     """
 3     资产信息表,所有资产公共信息(交换机,服务器,防火墙等)
 4     """
 5     device_type_choices = (
 6         (1, '服务器'),
 7         (2, '交换机'),
 8         (3, '防火墙'),
 9     )
10     device_status_choices = (
11         (1, '上架'),
12         (2, '在线'),
13         (3, '离线'),
14         (4, '下架'),
15     )
16 
17     device_type_id = models.IntegerField(choices=device_type_choices, default=1)
18     device_status_id = models.IntegerField(choices=device_status_choices, default=1)
19 
20     cabinet_num = models.CharField('机柜号', max_length=30, null=True, blank=True)
21     cabinet_order = models.CharField('机柜中序号', max_length=30, null=True, blank=True)
22 
23     idc = models.ForeignKey('IDC', verbose_name='IDC机房', null=True, blank=True,on_delete=models.CASCADE)
24     business_unit = models.ForeignKey('BusinessUnit', verbose_name='属于的业务线', null=True, blank=True,on_delete=models.CASCADE)
25 
26     tag = models.ManyToManyField('Tag')
27 
28     latest_date = models.DateField(null=True)
29     create_at = models.DateTimeField(auto_now_add=True)
30 
31     class Meta:
32         verbose_name_plural = "资产表"
33 
34     def __str__(self):
35         return "%s-%s-%s" % (self.idc.name, self.cabinet_num, self.cabinet_order)
models
  1 from django.shortcuts import render,HttpResponse
  2 from django.views.decorators.csrf import csrf_exempt
  3 from django.db.models import Q,F
  4 from DB import models
  5 import json
  6 from unitpub.pager_Class import Pagination
  7 # Create your views here.
  8 
  9 
 10 def index(req):
 11     """
 12     数据库获取数据
 13     :param req:
 14     :return:
 15     """
 16     return render(req,'tabledemo.html')
 17 
 18 @csrf_exempt
 19 def datajson(req):
 20     """
 21     从数据库获取数据
 22     :param req:
 23     :return:
 24     """
 25     if req.method == 'POST':
 26         ret = {'status': False, 'message': '数据没有任何变化'}
 27         data_list = req.POST.get('post_list')
 28         data_type = req.POST.get('type')
 29         if data_type == 'update':
 30             for data in json.loads(data_list):
 31                 if len(data) > 1:
 32                     # print(data)
 33                     isupdate = models.Asset.objects.filter(id=data['id']).update(**data)
 34                     if isupdate:
 35                         ret['status'] = True
 36                         ret['message'] = '更新成功'
 37             return HttpResponse(json.dumps(ret))
 38         elif data_type == 'delete':
 39             isdelete = models.Asset.objects.filter(id=data_list).delete()
 40             if isdelete:
 41                 ret['status'] = True
 42                 ret['message'] = '删除数据'
 43             return HttpResponse(json.dumps(ret))
 44         else:
 45             return HttpResponse(json.dumps(ret))
 46     else:
 47         # q:数据库字段
 48         # title:显示表头
 49         # display:是否显示
 50         # text:{'content':"{m}-{n}",'kwargs':{'m':'某机房','n':'@cabinet_order'}} 字符串格式化带@符号取数据库否则固定值
 51         # @@代表取数据库内存值
 52         """
 53         'attr':{
 54                     'name': 'idc_id',   更新时更新数据库什么字段
 55                     'old_val': '@idc__id',  为了让编辑时select得value值与数据库id一致
 56                     'edit-enable': 'true', 是否编辑
 57                     'edit-type': 'select', 前端类型
 58                     'global-name':'idc_choices'  全局变量名字
 59                 }
 60         """
 61         table_config=[
 62             # 配置选项
 63             {
 64                 'q': None,
 65                 'title': "选项",
 66                 'display': True,
 67                 'text': {'content': "<input type='checkbox'/>", 'kwargs': {}},
 68                 'attrs': {},
 69             },
 70             # 配置id
 71             {
 72                 'q': 'id',
 73                 'title':'ID',
 74                 'display':False,
 75                 'text':{},
 76                 'attr':{}
 77             },
 78             # 配置类型
 79             {
 80                 'q': 'device_type_id',
 81                 'title': '资产类型',
 82                 'display': True,
 83                 'text': {'content':"{n}",'kwargs':{'n':'@@device_type_choices'}},
 84                 'attr':{
 85                     'name':'device_type_id',
 86                     'old_val': '@device_type_id',
 87                     'edit-enable': 'true',
 88                     'edit-type': 'select',
 89                     'global-name': 'device_type_choices'
 90                 }
 91             },
 92             # 配置类型
 93             {
 94                 'q': 'device_status_id',
 95                 'title': '状态',
 96                 'display': True,
 97                 'text': {'content': "{n}", 'kwargs': {'n': '@@device_status_choices'}},
 98                 'attr':{
 99                     'name':'device_status_id',
100                     'old_val': '@device_status_id',
101                     'edit-enable': 'true',
102                     'edit-type': 'select',
103                     'global-name': 'device_status_choices'
104                 }
105             },
106             # 配置数据:ForeignKey 为了select框单独取id才能有默认值
107             {
108                 'q': 'idc__id',
109                 'title': 'IDC',
110                 'display': False,
111                 'text': {},
112                 'attr': {}
113             },
114             # 配置数据:ForeignKey
115             {
116                 'q': 'idc__name',
117                 'title': 'IDC',
118                 'display': True,
119                 'text': {'content': "{n}", 'kwargs': {'n': '@idc__name'}},
120                 'attr':{
121                     'name': 'idc_id', # 注意是单下划线
122                     'old_val': '@idc__id',
123                     'edit-enable': 'true',
124                     'edit-type': 'select',
125                     'global-name':'idc_choices'
126                 }
127             },
128             # 配置数据
129             {
130                 'q': 'cabinet_num',
131                 'title': '机柜号',
132                 'display': True,
133                 'text': {'content':"{n}",'kwargs':{'n':'@cabinet_num'}},
134                 'attr':{
135                     'name': 'cabinet_num',
136                     'old_val': '@cabinet_num',
137                     'edit-enable': 'true',
138                     'edit-type': 'input'
139                 }
140             },
141             # 配置数据
142             {
143                 'q': 'cabinet_order',
144                 'title': '机柜位置',
145                 'display': True,
146                 'text': {'content':"{m}-{n}",'kwargs':{'m':'某机房','n':'@cabinet_order'}},
147                 'attr':{
148                     'name': 'cabinet_order',
149                     'old_val': '@cabinet_order',
150                     'edit_enable':'true',
151                     'edit_type':'input',
152                 }
153             },
154             # 配置操作
155             {
156                 'q': None,
157                 'title': '操作',
158                 'display': True,
159                 'text': {'content': "<a href='/data_show-{x}/'>{n}</a> <a href='/data_show-{x}/'>{m}</a>", 'kwargs': {'n': '详情','m': '编辑', 'x':'@id'}},
160                 'attr': {}
161             }
162         ]
163 
164         q_list = []
165         for i in table_config:
166             if not i['q']:
167                 continue
168             q_list.append(i['q'])
169 
170         # 数据库取哪几列数据
171         get_postlist = req.GET.get('data_list')
172         if get_postlist:
173             data_list = models.Asset.objects.filter(Q(cabinet_num__startswith=get_postlist)|Q(cabinet_order__startswith=get_postlist)).values(*q_list)
174             data_count = models.Asset.objects.filter(Q(cabinet_num__startswith=get_postlist)|Q(cabinet_order__startswith=get_postlist)).count()
175         else:
176             data_list = models.Asset.objects.all().values(*q_list)
177             data_count = models.Asset.objects.count()
178         data_list = list(data_list)
179         # 分页
180         current_page = req.GET.get('pager')
181         page_obj = Pagination(data_count, current_page)
182         data_list = data_list[page_obj.start():page_obj.end()]
183 
184         result = {
185             'table_config':table_config,  # 配置文件
186             'data_list':data_list, # 构造数据
187             'global_dict':{
188                 'device_type_choices': models.Asset.device_type_choices,  # 内存中的类型
189                 'device_status_choices': models.Asset.device_status_choices,  # 内存中的类型
190                 'idc_choices': list(models.IDC.objects.values_list('id', 'name')),
191             },
192             'pager': page_obj.page_str(),
193         }
194 
195         return HttpResponse(json.dumps(result))
Views
 1 '''
 2 TotalNumber:总个数
 3 CurrentPage:当前页【1/2/3/4/5/6/7】
 4 barsNumber:每页显示多少条【10条数据】
 5 MaxPageNumber:最大显示多少个【1,2,3,4,5,6,7】
 6 '''
 7 
 8 
 9 class Pagination(object):
10     def __init__(self,TotalNumber,CurrentPage,barsNumber=5,MaxPageNumber=7):
11         self.Total_number=TotalNumber
12         try:
13             v = int(CurrentPage)
14             if v<=0:
15                 v=1
16             self.Current_page=v
17         except Exception as e:
18             self.Current_page = 1
19         self.bars_number=barsNumber
20         self.Max_pageNumber=MaxPageNumber
21     # 起始数据
22     def start(self):
23         return (self.Current_page - 1) * self.bars_number
24     # 结束数据
25     def end(self):
26         return self.Current_page * self.bars_number
27 
28     # 总页数
29     @property
30     def num_pages(self):
31         '''
32         总页数
33         :return:
34         '''
35         a,b = divmod(self.Total_number,self.bars_number)
36         if b==0:
37             return a
38         else:
39             return a+1
40 
41     # 显示页码数
42     def page_num_range(self):
43         #总页数小于显示页码
44         if self.num_pages < self.Max_pageNumber:
45             return range(1,self.num_pages+1)
46         #总页数很多
47         part = int(self.Max_pageNumber/2)
48         if self.Current_page <= part:
49             return range(1,self.Max_pageNumber+1)
50         if (self.Current_page+part) > self.num_pages:
51             return range(self.num_pages-self.Max_pageNumber,self.num_pages+1)
52         return range(self.Current_page-part,self.Current_page+part+1)
53 
54     # 返回页码给前端
55     def page_str(self):
56         page_list=[]
57         # 首页
58         first="<li><a pnum='1'>首页</a></li>"
59         page_list.append(first)
60         # 上一页
61         if self.Current_page ==1 :
62             prev="<li><a href='javascript:void(0)'>上一页</a></li>"
63         else:
64             prev="<li><a pnum='%d'>上一页</a></li>" % (self.Current_page-1)
65         page_list.append(prev)
66         # 页码
67         for i in self.page_num_range():
68             if i == self.Current_page:
69                 temp = "<li pnum='%d' class='active'><a>%s</a></li>" % (i,i)
70             else:
71                 temp="<li><a pnum='%d'>%s</a></li>" % (i,i)
72             page_list.append(temp)
73         # 下一页
74         if self.Current_page == self.num_pages :
75             next_page="<li><a href='javascript:void(0)'>下一页</a></li>"
76         else:
77             next_page="<li><a pnum='%d'>下一页</a></li>" % (self.Current_page+1)
78         page_list.append(next_page)
79         # # 尾页
80         end_page = "<li><a pnum='%d'>尾页</a></li>" % self.num_pages
81         page_list.append(end_page)
82         # 页码概要
83         end_html = "<li><a href='javascript:void(0)' >共 %d页 / %d 条数据</a></li>" % (self.num_pages, self.Total_number,)
84         page_list.append(end_html)
85         return ''.join(page_list)
paper

 

posted @ 2018-12-04 10:57  我在地球凑人数的日子  阅读(120)  评论(0)    收藏  举报