Django项目:CRM(客户关系管理系统)--22--14PerfectCRM实现King_admin分页的省略显示

  1 {#table_data_list.html#}
  2 {## ————————08PerfectCRM实现King_admin显示注册表的字段表头————————#}
  3 
  4 {% extends 'king_master/king_index.html' %}   {#继承模板#}
  5 {% load kingadmin_tags %} {#通过自己定义标签获取中文,Django中利用filter与simple_tag为前端自定义函数的实现方法#}
  6 
  7 {% block right-container-content %}
  8 
  9     {#调用kingadmin_tags里的方法  获取   base_admin的值 #}
 10     <h4>{% get_model_verbose_name admin_obj.model  %}</h4>
 11 
 12     <table class="table table-hover">
 13           <thead>
 14             <tr>
 15             {#循环调用kingadmin/base_admin里的class BaseAdmin下的list_display = () 方法#}
 16                 {% for column in admin_obj.list_display %}
 17                     <th>{{ column }}</th>
 18                 {% endfor %}
 19             </tr>
 20           </thead>
 21 
 22         {## ————————09PerfectCRM实现King_admin显示注册表的内容————————#}
 23           <tbody>
 24             {#循环调用kingadmin/views 里的def table_data_list下的admin_obj.querysets #}
 25             {% for obj in admin_obj.querysets %}
 26                 <tr>
 27                     {#通过kingadmin_tags在后台处理 再传到前端 #}
 28                     {#调用kingadmin/templateags/kingadmin_tags 里的def build_table_row(admin_obj,obj):#}
 29                     {% build_table_row  admin_obj obj  %}
 30                 </tr>
 31             {% endfor %}
 32           </tbody>
 33         {## ————————09PerfectCRM实现King_admin显示注册表的内容————————#}
 34 
 35     </table>
 36 
 37     {## ————————12PerfectCRM实现King_admin分页上下页————————#}
 38     <div class="row">
 39         <div class="pagination">
 40             <span class="step-links">
 41                 {% if admin_obj.querysets.has_previous  %}
 42                     <a href="?page={{ admin_obj.querysets.previous_page_number }}">上一页 </a>
 43                 {% endif %}
 44 
 45                 <span class="current">
 46                     第{{ admin_obj.querysets.number }}页,共{{ admin_obj.querysets.paginator.num_pages }}页
 47                 </span>
 48 
 49                 {% if admin_obj.querysets.has_next %}
 50                     <a href="?page={{ admin_obj.querysets.next_page_number }}">下一页</a>
 51                 {% endif %}
 52             </span>
 53         </div>
 54     </div>
 55     {## ————————12PerfectCRM实现King_admin分页上下页————————#}
 56 
 57 {## ————————13PerfectCRM实现King_admin分页页数————————#}
 58     <nav aria-label="...">
 59       <ul class="pagination">
 60         <li class="disabled"></li>
 61           {% for  page in admin_obj.querysets.paginator.page_range  %}  {#循环 分页 范围#}
 62 
 63               {% if page == admin_obj.querysets.number  %} {#当前页高亮,否则不加高亮#}
 64                   <li class="active">
 65               {% else %}
 66                    <li >
 67               {% endif %}
 68 
 69                                         {#后台拼接返回,kingadmin/templatetags/kingadmin_tags.py 里def generate_filter_url(admin_obj):#}
 70               <a href="?page={{ page }}{%  generate_filter_url admin_obj %}">{{ page }}</a>
 71               </li>
 72           {% endfor %}
 73       </ul>
 74     </nav>
 75 {## ————————13PerfectCRM实现King_admin分页页数————————#}
 76 
 77 {## ————————14PerfectCRM实现King_admin分页的省略显示————————#}
 78     <div class="row panel-body">
 79         <nav aria-label="...">
 80             <ul class="pagination">
 81                 <!--如果有上一页-->
 82                 {% if admin_obj.querysets.has_previous %}
 83                     <li><a href="?page={{ admin_obj.querysets.previous_page_number }}{% generate_filter_url admin_obj %}"
 84                            aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>
 85                 {% else %}
 86                     <li class="disabled">
 87                         <a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>
 88                 {% endif %}
 89 
 90                 <!--#分页的省略显示  kingadmin/templatetags/kingadmin_tags.py里def pag_omit(request,admin_obj):-->
 91                 {% pag_omit request admin_obj %}
 92 
 93                 <!--如果有下一页-->
 94                 {% if admin_obj.querysets.has_next %}
 95                     <li><a href="?page={{ admin_obj.querysets.next_page_number }}{% generate_filter_url admin_obj %}"
 96                            aria-label="Previous"><span aria-hidden="true">&raquo;</span></a></li>
 97                 {% else %}
 98                     <li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">&raquo;</span></a>
 99                     </li>
100                 {% endif %}
101             </ul>
102         </nav>
103     </div>
104 {## ————————14PerfectCRM实现King_admin分页的省略显示————————#}
105 
106 
107 {% endblock %}
108 {## ————————08PerfectCRM实现King_admin显示注册表的字段表头————————#}
{#table_data_list.html#}

  1 #kingadmin_tags.py
  2 
  3 # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
  4 
  5 # # 因为前端禁止使用下划线开头(_meta.verbose_name ),所以通过后端处理后返回前端。
  6 # from django import template #模板
  7 # register = template.Library() #模板库
  8 #
  9 # @register.simple_tag #Django中利用filter与simple_tag为前端自定义函数的实现方法
 10 # def get_app_name(model_obj):
 11 #
 12 #     # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
 13 #     # return model_obj._meta.verbose_name_plural
 14 #     '''
 15 #      #判断 数据库 里如果有  verbose_name  或者  verbose_name_plural 就 调用  如果都没有 就使用默认的(英文)
 16 #         class Meta:
 17 #         verbose_name = "04客户信息表"           #在 Django  Admin 里 表名显示中文 但是会加s
 18 #         verbose_name_plural = "04客户信息表"    #在 Django  Admin 里 表名显示中文 不会加s
 19 #     '''
 20 #     model_name = model_obj._meta.verbose_name_plural if model_obj._meta.verbose_name else model_obj._meta.verbose_name_plural
 21 #     if not model_name:
 22 #         model_name = model_obj._meta.model_name
 23 #
 24 #     return model_name
 25     # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
 26 
 27 # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
 28 
 29 # ————————07PerfectCRM实现King_admin显示注册的表————————
 30 #因为前端禁止使用下划线开头(_meta.verbose_name ),所以通过后端处理后返回前端。
 31 from django import template #模板
 32 register = template.Library() #模板库
 33 
 34 @register.simple_tag #Django中利用filter与simple_tag为前端自定义函数的实现方法
 35 def get_model_verbose_name(model_obj):
 36     '''
 37      #判断 数据库 里如果有  verbose_name  或者  verbose_name_plural 就 调用  如果都没有 就使用默认的(英文)
 38         class Meta:
 39         verbose_name = "04客户信息表"           #在 Django  Admin 里 表名显示中文 但是会加s
 40         verbose_name_plural = "04客户信息表"    #在 Django  Admin 里 表名显示中文 不会加s
 41     '''
 42     model_name = model_obj._meta.verbose_name_plural if model_obj._meta.verbose_name else model_obj._meta.verbose_name_plural
 43     if not model_name:
 44         model_name = model_obj._meta.model_name
 45     return model_name
 46 
 47 @register.simple_tag
 48 def get_model_name(model_obj):
 49     return model_obj._meta.model_name
 50 @register.simple_tag
 51 def get_app_name(model_obj):
 52     return model_obj._meta.app_label
 53 # ————————07PerfectCRM实现King_admin显示注册的表————————
 54 
 55 
 56 # ————————09PerfectCRM实现King_admin显示注册表的内容————————
 57 from django.utils.safestring import mark_safe #使用mark_safe函数标记后,django将不再对该函数的内容进行转义
 58 @register.simple_tag
 59 def build_table_row(admin_obj,obj):#通过kingadmin_tags在后台处理 再传到前端
 60     row_ele = "" #为了生成一整行返回前端
 61     if admin_obj.list_display:#如果不为空,有在crm/kingadmin.py注册site.register(models.Customer,CustomerAdmin)
 62         #循环所有 要显示 的字符串 进行反射 展示 字段
 63         for column in admin_obj.list_display: #循环base_admin里class BaseAdmin下list_display = ()
 64             column_obj = obj._meta.get_field(column)#遍历获取  传进的参数对象
 65 
 66             if column_obj.choices:#判断如果字段有choices属性
 67                 #获取choices的字符串(外健)
 68                 get_column_data = getattr(obj,"get_%s_display" % column) #反射,传进的参数对象,拼接字段
 69                 column_data = get_column_data()#函数,拿到数据
 70             else:
 71                 column_data = getattr(obj, column)#反射,
 72             # ————————10PerfectCRM实现King_admin日期优化————————
 73             if type(column_data).__name__ == 'datetime':
 74                 column_data = column_data.strftime('%Y-%m-%d %H-%M-%S')
 75             # ————————10PerfectCRM实现King_admin日期优化————————
 76 
 77             td_ele = '''<td>%s</td>''' % column_data  #把反射来的值 拼接字符串 生成<td>
 78             row_ele += td_ele    #把 <td>  拼接到上面到空字符串
 79     else:
 80         row_ele +="<td>%s</td>" %obj  #把<td>拼接到上面到空字符串,crm/models.py里 def __str__(self):的返回值
 81     return mark_safe(row_ele) #使用mark_safe函数标记后,django将不再对该函数的内容进行转义
 82 # ————————09PerfectCRM实现King_admin显示注册表的内容————————
 83 
 84 
 85 # ————————13PerfectCRM实现King_admin分页页数————————
 86 #分页功能kingadmin/templates/kingadmin/table_data_list.html里 <a href="?page={{ page }}{%  generate_filter_url admin_obj %}">{{ page }}
 87 @register.simple_tag
 88 def generate_filter_url(admin_obj): #拼接URL
 89     url = ''
 90     for k,v in admin_obj.filter_condtions.items():
 91         url += "&%s=%s" %(k,v )
 92     return url
 93 # ————————13PerfectCRM实现King_admin分页页数————————
 94 
 95 # ————————14PerfectCRM实现King_admin分页的省略显示————————
 96 #分页的省略显示
 97 @register.simple_tag
 98 def pag_omit(request,admin_obj):#传入当前页面值
 99     rest=''#大字符串
100     add_tags=False#标志位
101     for pages in admin_obj.querysets.paginator.page_range:
102         #   前两页    或   后  两页                                       或    当前页的前后页
103         if pages < 3 or pages>admin_obj.querysets.paginator.num_pages -2 or abs(admin_obj.querysets.number -pages) <=2:
104             #样式
105             add_tags=False
106             ele_class=''  #颜色
107             if pages == admin_obj.querysets.number: #--如果是当前页码,颜色加深 不进链接跳转--
108                 ele_class="active"    #颜色加深
109 
110             rest+='''<li class="%s"><a href="?page=%s">%s</a></li>'''%(ele_class,pages,pages)  #--拼接URL--
111         else:
112             if add_tags==False:#如果不是标志位的页面
113                 rest+='<li><a>...</a></li>'
114                 add_tags=True#标志位为真
115 
116     return mark_safe(rest)  #使用mark_safe函数标记后,django将不再对该函数的内容进行转义
117 
118 # ————————14PerfectCRM实现King_admin分页的省略显示————————
#kingadmin_tags.py

 

如果感觉本章博客对您有帮助,请尽情打赏吧!

原文地址:https://www.cnblogs.com/ujq3/p/8625772.html