zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    codevs 1115 开心的金明
    POJ 1125 Stockbroker Grapevine
    POJ 2421 constructing roads
    codevs 1390 回文平方数 USACO
    codevs 1131 统计单词数 2011年NOIP全国联赛普及组
    codevs 1313 质因数分解
    洛谷 绕钉子的长绳子
    洛谷 P1276 校门外的树(增强版)
    codevs 2627 村村通
    codevs 1191 数轴染色
  • 原文地址:https://www.cnblogs.com/ujq3/p/8625685.html
Copyright © 2011-2022 走看看