Django项目:CRM(客户关系管理系统)--22--14PerfectCRM实现King_admin分页的省略显示
{#table_data_list.html#}
{## ————————08PerfectCRM实现King_admin显示注册表的字段表头————————#} {% extends 'king_master/king_index.html' %} {#继承模板#}
{% load kingadmin_tags %} {#通过自己定义标签获取中文,Django中利用filter与simple_tag为前端自定义函数的实现方法#} {% block right-container-content %} {#调用kingadmin_tags里的方法 获取 base_admin的值 #}
<h4>{% get_model_verbose_name admin_obj.model %}</h4> <table class="table table-hover">
<thead>
<tr>
{#循环调用kingadmin/base_admin里的class BaseAdmin下的list_display = () 方法#}
{% for column in admin_obj.list_display %}
<th>{{ column }}</th>
{% endfor %}
</tr>
</thead> {## ————————09PerfectCRM实现King_admin显示注册表的内容————————#}
<tbody>
{#循环调用kingadmin/views 里的def table_data_list下的admin_obj.querysets #}
{% for obj in admin_obj.querysets %}
<tr>
{#通过kingadmin_tags在后台处理 再传到前端 #}
{#调用kingadmin/templateags/kingadmin_tags 里的def build_table_row(admin_obj,obj):#}
{% build_table_row admin_obj obj %}
</tr>
{% endfor %}
</tbody>
{## ————————09PerfectCRM实现King_admin显示注册表的内容————————#} </table> {## ————————12PerfectCRM实现King_admin分页上下页————————#}
<div class="row">
<div class="pagination">
<span class="step-links">
{% if admin_obj.querysets.has_previous %}
<a href="?page={{ admin_obj.querysets.previous_page_number }}">上一页 </a>
{% endif %} <span class="current">
第{{ admin_obj.querysets.number }}页,共{{ admin_obj.querysets.paginator.num_pages }}页
</span> {% if admin_obj.querysets.has_next %}
<a href="?page={{ admin_obj.querysets.next_page_number }}">下一页</a>
{% endif %}
</span>
</div>
</div>
{## ————————12PerfectCRM实现King_admin分页上下页————————#} {## ————————13PerfectCRM实现King_admin分页页数————————#}
<nav aria-label="...">
<ul class="pagination">
<li class="disabled"></li>
{% for page in admin_obj.querysets.paginator.page_range %} {#循环 分页 范围#} {% if page == admin_obj.querysets.number %} {#当前页高亮,否则不加高亮#}
<li class="active">
{% else %}
<li >
{% endif %} {#后台拼接返回,kingadmin/templatetags/kingadmin_tags.py 里def generate_filter_url(admin_obj):#}
<a href="?page={{ page }}{% generate_filter_url admin_obj %}">{{ page }}</a>
</li>
{% endfor %}
</ul>
</nav>
{## ————————13PerfectCRM实现King_admin分页页数————————#} {## ————————14PerfectCRM实现King_admin分页的省略显示————————#}
<div class="row panel-body">
<nav aria-label="...">
<ul class="pagination">
<!--如果有上一页-->
{% if admin_obj.querysets.has_previous %}
<li><a href="?page={{ admin_obj.querysets.previous_page_number }}{% generate_filter_url admin_obj %}"
aria-label="Previous"><span aria-hidden="true">«</span></a></li>
{% else %}
<li class="disabled">
<a href="#" aria-label="Previous"><span aria-hidden="true">«</span></a></li>
{% endif %} <!--#分页的省略显示 kingadmin/templatetags/kingadmin_tags.py里def pag_omit(request,admin_obj):-->
{% pag_omit request admin_obj %} <!--如果有下一页-->
{% if admin_obj.querysets.has_next %}
<li><a href="?page={{ admin_obj.querysets.next_page_number }}{% generate_filter_url admin_obj %}"
aria-label="Previous"><span aria-hidden="true">»</span></a></li>
{% else %}
<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">»</span></a>
</li>
{% endif %}
</ul>
</nav>
</div>
{## ————————14PerfectCRM实现King_admin分页的省略显示————————#} {% endblock %}
{## ————————08PerfectCRM实现King_admin显示注册表的字段表头————————#}
{#table_data_list.html#}
#kingadmin_tags.py # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— # # 因为前端禁止使用下划线开头(_meta.verbose_name ),所以通过后端处理后返回前端。
# from django import template #模板
# register = template.Library() #模板库
#
# @register.simple_tag #Django中利用filter与simple_tag为前端自定义函数的实现方法
# def get_app_name(model_obj):
#
# # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
# # return model_obj._meta.verbose_name_plural
# '''
# #判断 数据库 里如果有 verbose_name 或者 verbose_name_plural 就 调用 如果都没有 就使用默认的(英文)
# class Meta:
# verbose_name = "04客户信息表" #在 Django Admin 里 表名显示中文 但是会加s
# verbose_name_plural = "04客户信息表" #在 Django Admin 里 表名显示中文 不会加s
# '''
# model_name = model_obj._meta.verbose_name_plural if model_obj._meta.verbose_name else model_obj._meta.verbose_name_plural
# if not model_name:
# model_name = model_obj._meta.model_name
#
# return model_name
# ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— # ————————07PerfectCRM实现King_admin显示注册的表————————
#因为前端禁止使用下划线开头(_meta.verbose_name ),所以通过后端处理后返回前端。
from django import template #模板
register = template.Library() #模板库 @register.simple_tag #Django中利用filter与simple_tag为前端自定义函数的实现方法
def get_model_verbose_name(model_obj):
'''
#判断 数据库 里如果有 verbose_name 或者 verbose_name_plural 就 调用 如果都没有 就使用默认的(英文)
class Meta:
verbose_name = "04客户信息表" #在 Django Admin 里 表名显示中文 但是会加s
verbose_name_plural = "04客户信息表" #在 Django Admin 里 表名显示中文 不会加s
'''
model_name = model_obj._meta.verbose_name_plural if model_obj._meta.verbose_name else model_obj._meta.verbose_name_plural
if not model_name:
model_name = model_obj._meta.model_name
return model_name @register.simple_tag
def get_model_name(model_obj):
return model_obj._meta.model_name
@register.simple_tag
def get_app_name(model_obj):
return model_obj._meta.app_label
# ————————07PerfectCRM实现King_admin显示注册的表———————— # ————————09PerfectCRM实现King_admin显示注册表的内容————————
from django.utils.safestring import mark_safe #使用mark_safe函数标记后,django将不再对该函数的内容进行转义
@register.simple_tag
def build_table_row(admin_obj,obj):#通过kingadmin_tags在后台处理 再传到前端
row_ele = "" #为了生成一整行返回前端
if admin_obj.list_display:#如果不为空,有在crm/kingadmin.py注册site.register(models.Customer,CustomerAdmin)
#循环所有 要显示 的字符串 进行反射 展示 字段
for column in admin_obj.list_display: #循环base_admin里class BaseAdmin下list_display = ()
column_obj = obj._meta.get_field(column)#遍历获取 传进的参数对象 if column_obj.choices:#判断如果字段有choices属性
#获取choices的字符串(外健)
get_column_data = getattr(obj,"get_%s_display" % column) #反射,传进的参数对象,拼接字段
column_data = get_column_data()#函数,拿到数据
else:
column_data = getattr(obj, column)#反射,
# ————————10PerfectCRM实现King_admin日期优化————————
if type(column_data).__name__ == 'datetime':
column_data = column_data.strftime('%Y-%m-%d %H-%M-%S')
# ————————10PerfectCRM实现King_admin日期优化———————— td_ele = '''<td>%s</td>''' % column_data #把反射来的值 拼接字符串 生成<td>
row_ele += td_ele #把 <td> 拼接到上面到空字符串
else:
row_ele +="<td>%s</td>" %obj #把<td>拼接到上面到空字符串,crm/models.py里 def __str__(self):的返回值
return mark_safe(row_ele) #使用mark_safe函数标记后,django将不再对该函数的内容进行转义
# ————————09PerfectCRM实现King_admin显示注册表的内容———————— # ————————13PerfectCRM实现King_admin分页页数————————
#分页功能kingadmin/templates/kingadmin/table_data_list.html里 <a href="?page={{ page }}{% generate_filter_url admin_obj %}">{{ page }}
@register.simple_tag
def generate_filter_url(admin_obj): #拼接URL
url = ''
for k,v in admin_obj.filter_condtions.items():
url += "&%s=%s" %(k,v )
return url
# ————————13PerfectCRM实现King_admin分页页数———————— # ————————14PerfectCRM实现King_admin分页的省略显示————————
#分页的省略显示
@register.simple_tag
def pag_omit(request,admin_obj):#传入当前页面值
rest=''#大字符串
add_tags=False#标志位
for pages in admin_obj.querysets.paginator.page_range:
# 前两页 或 后 两页 或 当前页的前后页
if pages < 3 or pages>admin_obj.querysets.paginator.num_pages -2 or abs(admin_obj.querysets.number -pages) <=2:
#样式
add_tags=False
ele_class='' #颜色
if pages == admin_obj.querysets.number: #--如果是当前页码,颜色加深 不进链接跳转--
ele_class="active" #颜色加深 rest+='''<li class="%s"><a href="?page=%s">%s</a></li>'''%(ele_class,pages,pages) #--拼接URL--
else:
if add_tags==False:#如果不是标志位的页面
rest+='<li><a>...</a></li>'
add_tags=True#标志位为真 return mark_safe(rest) #使用mark_safe函数标记后,django将不再对该函数的内容进行转义 # ————————14PerfectCRM实现King_admin分页的省略显示————————
#kingadmin_tags.py
如果感觉本章博客对您有帮助,请尽情打赏吧!
Django项目:CRM(客户关系管理系统)--22--14PerfectCRM实现King_admin分页的省略显示的更多相关文章
- Django项目:CRM(客户关系管理系统)--32--24PerfectCRM实现King_admin自定义操作数据
#admin.py # ————————01PerfectCRM基本配置ADMIN———————— from django.contrib import admin # Register your m ...
- Django项目:CRM(客户关系管理系统)--31--23PerfectCRM实现King_admin数据删除
登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html # king_urls.py # ————————02PerfectCRM创建ADMIN页面—— ...
- Django项目:CRM(客户关系管理系统)--69--59PerfectCRM实现king_admin行内编辑
#base_admin.py # ————————24PerfectCRM实现King_admin自定义操作数据———————— from django.shortcuts import render ...
- Django项目:CRM(客户关系管理系统)--65--55PerfectCRM实现CRM客户报名状态颜色变化
# kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ...
- Django项目:CRM(客户关系管理系统)--64--54PerfectCRM实现CRM客户报名链接
# kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ...
- Django项目:CRM(客户关系管理系统)--35--27PerfectCRM实现King_admin编辑复选框
#admin.py # ————————01PerfectCRM基本配置ADMIN———————— from django.contrib import admin # Register your m ...
- Django项目:CRM(客户关系管理系统)--41--33PerfectCRM实现King_admin编辑整张表限制
readonly_table=False#默认表单不锁定 readonly_table=True#默认表单不锁定 # forms.py # ————————19PerfectCRM实现King_adm ...
- Django项目:CRM(客户关系管理系统)--27--19PerfectCRM实现King_admin数据修改
登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html {#table_data_list.html#} {## ————————08PerfectCR ...
- Django项目:CRM(客户关系管理系统)--26--18PerfectCRM实现King_admin搜索关键字
search_fields = ('name','qq',) 登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html search_fields = ( ...
- Django项目:CRM(客户关系管理系统)--25--17PerfectCRM实现King_admin单列排序
登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html {#table_data_list.html#} {## ————————08PerfectCR ...
随机推荐
- vue 图片懒加载v-lazy
搬运自:https://blog.csdn.net/twodogya/article/details/80223331 vue v-lazy官方API:https://www.npmjs.com/pa ...
- java_缓冲流(字节输出流)
缓冲流分为: 字节缓冲流:BufferedIntputSream(字节缓冲输出流),BufferdOutputStream(字节缓冲输入流) 字符缓冲流:BufferedReader(字符输入缓冲流) ...
- 连接RDS数据库
- 移植 inetd
inetd 的选择及获取 Busybox1.1.3 提供了 inetd 支持.如果读者使用的是较低版本的不提供 inetd 的 Busybox,那么可以考虑使 用 netkit 套件来提供网络服务.强 ...
- leetcode-95-不同的二叉搜索树②*
题目描述: 方法一:递归 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self. ...
- Python-数据分析模块
目录 numpy 模块 matplotlib 模块 pandas 模块 numpy 模块 numpy 模块主要用来做数据分析,对numpy数组 进行科学运算 主要方法和常用属性,都是用numpy 生成 ...
- 【自家测试】2017-12-16 FJOI2016 d1
1. 所有公共子序列问题(allcs.pas/c/cpp)★问题描述:一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说,若给定序列X= x 1 x 2 ... x m ,则另一序列Z ...
- 洛谷P2526 【SHOI2001】小狗散步
原题传送门 题目背景 Grant喜欢带着他的小狗Pandog散步.Grant以一定的速度沿着固定路线走,该路线可能自交.Pandog喜欢游览沿途的景点,不过会在给定的N个点和主人相遇.小狗和主人同时从 ...
- centos7 安装 python3
sudo yum -y groupinstall "Development tools" sudo yum -y install zlib-devel bzip2-devel op ...
- Cesium官方教程9--粒子系统
原文地址:https://cesiumjs.org/tutorials/Particle-Systems-Tutorial/ 粒子系统介绍 这篇教程带你学习Cesium的粒子相关API,比如如何在你的 ...