Django项目:CRM(客户关系管理系统)--21--13PerfectCRM实现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分页页数————————#}
- {% 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分页页数————————
#kingadmin_tags.py
- #views
- # ————————02PerfectCRM创建ADMIN页面————————
- from django.shortcuts import render
- # ————————04PerfectCRM实现King_admin注册功能————————
- # from django import conf #配置文件
- # print("dj conf:",conf) #配置文件
- # print("dj conf:",conf.settings)#配置文件.设置
- # ————————04PerfectCRM实现King_admin注册功能————————
- # ————————04PerfectCRM实现King_admin注册功能————————
- from king_admin import app_config #自动调用 动态加载类和函数
- # ————————04PerfectCRM实现King_admin注册功能————————
- # ————————04PerfectCRM实现King_admin注册功能————————
- # from king_admin.base_admin import registered_sites # registered_sites={}
- from king_admin import base_admin
- # ————————04PerfectCRM实现King_admin注册功能————————
- # ————————11PerfectCRM实现King_admin基本分页————————
- from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger # 分页功能
- # ————————11PerfectCRM实现King_admin基本分页————————
- def app_index(request):
- # ————————04PerfectCRM实现King_admin注册功能————————
- # for app in conf.settings.INSTALLED_APPS:
- # print(app)#循环打印 配置文件.设置.安装应用程序#.Perfectcustomer\settings里的INSTALLED_APPS列表
- # ————————04PerfectCRM实现King_admin注册功能————————
- # ————————04PerfectCRM实现King_admin注册功能————————
- # return render(request, 'king_admin/app_index.html')
- # print("registered_sites",registered_sites)
- # return render(request, 'king_admin/app_index.html')
- # ————————04PerfectCRM实现King_admin注册功能————————
- # ————————04PerfectCRM实现King_admin注册功能————————
- # print("registered_sites", base_admin.registered_sites)
- # return render(request, 'king_admin/app_index.html')
- # ————————04PerfectCRM实现King_admin注册功能————————
- # ————————05PerfectCRM实现King_admin注册功能获取内存————————
- print("registered_sites",base_admin.site.registered_sites)
- return render(request, 'king_admin/app_index.html', {"site": base_admin.site})
- # ————————05PerfectCRM实现King_admin注册功能获取内存————————
- # ————————02PerfectCRM创建ADMIN页面————————
- # ————————13PerfectCRM实现King_admin分页页数————————
- #处理def table_data_list(request,app_name,model_name):里的内容,
- def filter_querysets(request,queryset):
- condtions = {}
- for k,v in request.GET.items():#不需要空的,判断是否为空
- if k=="page":continue##kingadmin分页功能
- query_res = queryset.filter(**condtions)
- return query_res,condtions
- # ————————13PerfectCRM实现King_admin分页页数————————
- # ————————08PerfectCRM实现King_admin显示注册表的字段表头————————
- def table_data_list(request,app_name,model_name):
- #通过2个参数到base_admin里获取class AdminRegisterException(Exception): 的对象
- admin_obj = base_admin.site.registered_sites[app_name][model_name] #base_admin
- # ————————09PerfectCRM实现King_admin显示注册表的内容————————
- admin_obj.querysets = admin_obj.model.objects.all()#取数据 传到 前端
- # ————————09PerfectCRM实现King_admin显示注册表的内容————————
- # ————————11PerfectCRM实现King_admin分页显示条数————————
- # from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger # 分页功能#放在顶上导入
- obj_list = admin_obj.model.objects.all()#取数据 传到 前端 #base_admin #获取传过来的所有对象
- # ————————13PerfectCRM实现King_admin分页页数————————
- queryset, condtions = filter_querysets(request, obj_list) #base_admin # 调用条件过滤
- # ————————13PerfectCRM实现King_admin分页页数————————
- paginator = Paginator(obj_list,admin_obj.list_per_page) #kingadmin里class CustomerAdmin(BaseAdmin):
- page = request.GET.get('page')
- try:
- objs = paginator.page(page) # 当前的页面的数据
- except PageNotAnInteger:
- # 如果页面不是一个整数,交付第一页。
- objs = paginator.page(1)
- except EmptyPage:
- # 如果页面的范围(例如9999),交付最后一页的搜索结果。
- objs = paginator.page(paginator.num_pages)
- admin_obj.querysets = objs # base_admin
- # ————————13PerfectCRM实现King_admin分页页数————————
- admin_obj.filter_condtions = condtions # base_admin
- # ————————13PerfectCRM实现King_admin分页页数————————
- # ————————11PerfectCRM实现King_admin分页显示条数————————
- return render(request,"king_admin/table_data_list.html",locals())
- # ————————08PerfectCRM实现King_admin显示注册表的字段表头————————
#views
Django项目:CRM(客户关系管理系统)--21--13PerfectCRM实现King_admin分页页数的更多相关文章
- Django项目:CRM(客户关系管理系统)--84--74PerfectCRM实现CRM权限和权限组限制访问URL
#models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...
- 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(客户关系管理系统)--44--36PerfectCRM实现King_admin密码修改
# king_urls.py # ————————02PerfectCRM创建ADMIN页面———————— from django.conf.urls import url from king_ad ...
- Django项目:CRM(客户关系管理系统)--41--33PerfectCRM实现King_admin编辑整张表限制
readonly_table=False#默认表单不锁定 readonly_table=True#默认表单不锁定 # forms.py # ————————19PerfectCRM实现King_adm ...
- Django项目:CRM(客户关系管理系统)--36--28PerfectCRM实现King_admin编辑限制
#admin.py # ————————01PerfectCRM基本配置ADMIN———————— from django.contrib import admin # Register your m ...
随机推荐
- vagrant生成多台虚拟机
第一种: # -*- mode: ruby -*- # vi: set ft=ruby : # All Vagrant configuration is done below. The "2 ...
- JS数组 编程练习 使用Javascript语言,把以下数组 在页面显示如下图所示的图案
编程练习 使用Javascript语言,把以下数组 var arr = ['*','##',"***","&&","****&quo ...
- 阿里云容器服务通过LoadBalancer暴露IPv6服务
背景: IPv4地址已接近枯竭,被誉为下一代互联网技术的IPv6成为新的“全球互联网门牌号”,它可以让地球上的每一粒沙子都拥有地址.当下,各国都在加速推进下一代互联网的部署,工信部也互联网服务商提出了 ...
- 二分图——poj2239
水题 /* n门课,每门课有一个时间t 要求最大的n->t的匹配 */ #include<iostream> #include<cstring> #include< ...
- fastjson json转linkedhashmap为null
试了几种JSONObject.parseObject的方法,返回的都是null: 使用Gson就可以转成功. LinkedHashMap<String, String> map = gso ...
- Office宏的基本利用
前言 Office宏,译自英文单词Macro.宏是Office自带的一种高级脚本特性,通过VBA代码,可以在Office中去完成某项特定的任务,而不必再重复相同的动作,目的是让用户文档中的一些任务自动 ...
- codeforces 1195D2-Submarine in the Rybinsk Sea
传送门:QAQQAQ 题意:自己看 思路:就是一个类似于数位DP的东西... 统计a[i]数位分解的数在每一位出现的个数,即分两种讨论: 1.位数小于当前j,则j会出现在q+i,而且计算顺序互换会计算 ...
- topology进程结束会不会关闭数据库连接
测试环境:redhat,oracle 11.2.0.3.0 测试目标:当java进程关闭之后,进程的数据库连接会不会被释放,何时被释放 实验证明:在运行topology前,执行 select coun ...
- 关于Spring Cloud Feign的一些记录!
学习Spring Cloud Feign过程中,相关资料都会反复强调:微服务调用的话(@FeignClient) 客户端方法的返回值和服务端方法的返回值还有方法名之类的都是要求一致的! 关于方法名是 ...
- JS基础语法之DOM02(事件)
1.常用事件 1.onclick 单击 应用场景:为按钮绑定 2.ondbclick 双击 3.onfocus 获得焦点 4.onblur 失去焦点 应用场景:用于表单验证,用户离开某个输入框时, ...