![Django项目:CRM(客户关系管理系统)--22--14PerfectCRM实现King_admin分页的省略显示
如果感觉本章博客对您有帮助,请尽情打赏吧!]()
![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">«</span></a></li>
85 {% else %}
86 <li class="disabled">
87 <a href="#" aria-label="Previous"><span aria-hidden="true">«</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">»</span></a></li>
97 {% else %}
98 <li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">»</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#}
![Django项目:CRM(客户关系管理系统)--22--14PerfectCRM实现King_admin分页的省略显示
如果感觉本章博客对您有帮助,请尽情打赏吧!]()
![Django项目:CRM(客户关系管理系统)--22--14PerfectCRM实现King_admin分页的省略显示
如果感觉本章博客对您有帮助,请尽情打赏吧!]()
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