• Django项目:CRM(客户关系管理系统)--21--13PerfectCRM实现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 
    78 
    79 
    80 {% endblock %}
    81 {## ————————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 
    86 # ————————13PerfectCRM实现King_admin分页页数————————
    87 #分页功能kingadmin/templates/kingadmin/table_data_list.html里 <a href="?page={{ page }}{%  generate_filter_url admin_obj %}">{{ page }}
    88 @register.simple_tag
    89 def generate_filter_url(admin_obj): #拼接URL
    90     url = ''
    91     for k,v in admin_obj.filter_condtions.items():
    92         url += "&%s=%s" %(k,v )
    93     return url
    94 # ————————13PerfectCRM实现King_admin分页页数————————
    #kingadmin_tags.py

     1 #views
     2 
     3 # ————————02PerfectCRM创建ADMIN页面————————
     4 from django.shortcuts import render
     5 
     6 # ————————04PerfectCRM实现King_admin注册功能————————
     7 # from django import conf #配置文件
     8 # print("dj conf:",conf) #配置文件
     9 # print("dj conf:",conf.settings)#配置文件.设置
    10 # ————————04PerfectCRM实现King_admin注册功能————————
    11 
    12 # ————————04PerfectCRM实现King_admin注册功能————————
    13 from king_admin import app_config #自动调用  动态加载类和函数
    14 # ————————04PerfectCRM实现King_admin注册功能————————
    15 
    16 # ————————04PerfectCRM实现King_admin注册功能————————
    17 # from king_admin.base_admin import registered_sites # registered_sites={}
    18 from king_admin import base_admin
    19 # ————————04PerfectCRM实现King_admin注册功能————————
    20 
    21 # ————————11PerfectCRM实现King_admin基本分页————————
    22 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger  # 分页功能
    23 # ————————11PerfectCRM实现King_admin基本分页————————
    24 
    25 def app_index(request):
    26     # ————————04PerfectCRM实现King_admin注册功能————————
    27     # for app in conf.settings.INSTALLED_APPS:
    28     #     print(app)#循环打印 配置文件.设置.安装应用程序#.Perfectcustomersettings里的INSTALLED_APPS列表
    29     # ————————04PerfectCRM实现King_admin注册功能————————
    30     
    31     # ————————04PerfectCRM实现King_admin注册功能————————
    32     # return render(request, 'king_admin/app_index.html')
    33     # print("registered_sites",registered_sites)
    34     # return render(request, 'king_admin/app_index.html')
    35     # ————————04PerfectCRM实现King_admin注册功能————————
    36 
    37     # ————————04PerfectCRM实现King_admin注册功能————————
    38     # print("registered_sites", base_admin.registered_sites)
    39     # return render(request, 'king_admin/app_index.html')
    40     # ————————04PerfectCRM实现King_admin注册功能————————
    41     
    42     # ————————05PerfectCRM实现King_admin注册功能获取内存————————
    43     print("registered_sites",base_admin.site.registered_sites)
    44     return render(request, 'king_admin/app_index.html', {"site": base_admin.site})
    45 # ————————05PerfectCRM实现King_admin注册功能获取内存————————
    46 
    47 # ————————02PerfectCRM创建ADMIN页面————————
    48 
    49 
    50 # ————————13PerfectCRM实现King_admin分页页数————————
    51 #处理def table_data_list(request,app_name,model_name):里的内容,
    52 def filter_querysets(request,queryset):
    53     condtions = {}
    54     for k,v in request.GET.items():#不需要空的,判断是否为空
    55         if k=="page":continue##kingadmin分页功能
    56     query_res = queryset.filter(**condtions)
    57     return query_res,condtions
    58 # ————————13PerfectCRM实现King_admin分页页数————————
    59 
    60 # ————————08PerfectCRM实现King_admin显示注册表的字段表头————————
    61 def table_data_list(request,app_name,model_name):
    62     #通过2个参数到base_admin里获取class AdminRegisterException(Exception): 的对象
    63     admin_obj = base_admin.site.registered_sites[app_name][model_name]  #base_admin
    64 
    65     # ————————09PerfectCRM实现King_admin显示注册表的内容————————
    66     admin_obj.querysets =  admin_obj.model.objects.all()#取数据 传到 前端
    67     # ————————09PerfectCRM实现King_admin显示注册表的内容————————
    68 
    69     # ————————11PerfectCRM实现King_admin分页显示条数————————
    70     # from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger  # 分页功能#放在顶上导入
    71     obj_list =  admin_obj.model.objects.all()#取数据 传到 前端  #base_admin  #获取传过来的所有对象
    72 
    73     # ————————13PerfectCRM实现King_admin分页页数————————
    74     queryset, condtions = filter_querysets(request, obj_list)  #base_admin   # 调用条件过滤
    75     # ————————13PerfectCRM实现King_admin分页页数————————
    76     
    77     paginator = Paginator(obj_list,admin_obj.list_per_page)  #kingadmin里class CustomerAdmin(BaseAdmin):
    78     page = request.GET.get('page')
    79     try:
    80         objs = paginator.page(page)  # 当前的页面的数据
    81     except PageNotAnInteger:
    82         # 如果页面不是一个整数,交付第一页。
    83         objs = paginator.page(1)
    84     except EmptyPage:
    85         # 如果页面的范围(例如9999),交付最后一页的搜索结果。
    86         objs = paginator.page(paginator.num_pages)
    87     admin_obj.querysets = objs  # base_admin
    88 
    89     # ————————13PerfectCRM实现King_admin分页页数————————
    90     admin_obj.filter_condtions = condtions  # base_admin
    91     # ————————13PerfectCRM实现King_admin分页页数————————
    92 
    93     # ————————11PerfectCRM实现King_admin分页显示条数————————
    94 
    95     return render(request,"king_admin/table_data_list.html",locals())
    96 # ————————08PerfectCRM实现King_admin显示注册表的字段表头————————
    #views
  • 相关阅读:
    java实现网络监听
    程序员必须知道FTP命令
    Java进化的尽头
    Oracle逻辑备份与恢复(Data Pump)
    JQuery日期选择器插件date-input
    大型高并发高负载网站的系统架构剖析
    万言万当,不如一默为官之道
    angular.js高级程序设计书本开头配置环境出错,谁能给解答一下
    安装meteor运行基本demo发生错误。
    nodejs 通过 get获取数据修改redis数据
  • 原文地址:https://www.cnblogs.com/ujq3/p/8625685.html
Copyright © 2020-2023  润新知