CRM项目(三)

CRM项目开发(三)

 
文章目录
  1. 1. 添加二级页面
    1. 1.1. 构造二级页面的路由
      1. 1.1.1. 原生admin二级页面路由分析
      2. 1.1.2. 仿造二级页面路由
    2. 1.2. 构造二级页面模板
    3. 1.3. 编写二级页面视图函数
    4. 1.4. 在首页中添加链接入口
  2. 2. 添加二级页面显示内容
    1. 2.1. 原生admin添加显示内容分析
    2. 2.2. king_admin中添加显示字段
    3. 2.3. 根据字段提取数据
    4. 2.4. 模板添加数据并渲染

前面我们已经将首页的雏形搞定,关于修饰部分,后面直接套用模板即可!接下来,我们需要做的是添加二级页面,也就是说,点击‘客户表’进入到独立的显示页面可以进行独立的操作。

添加二级页面

构造二级页面的路由

原生admin二级页面路由分析

先看图:

从图中,我们可以知道该url的构成条件:域名/后台名称/应用名称/表名/

仿造二级页面路由

在独立应用king_admin中的urls.py中添加,如下内容:

from django.conf.urls import url
from king_admin import views
urlpatterns = [
    url(r'^$', views.index, name='table_index'),
    url(r'^(\w+)/(\w+)/$', views.display_objects, name='display_objects'), #添加该数据,参数分别表示应用名和表名,name同样表示映射关系的引用
]

构造二级页面模板

king_admin模板目录下创建table_objs.html文件,然后只需要继承一级页面即可:

{% extends 'king_admin/table_index.html' %}
{% block container %}
    <div class="panel panel-info">
          <div class="panel-heading">
            <h3 class="panel-title">Panel title</h3>
          </div>
          <div class="panel-body">
               <div class="row">
               </div>
              {#具体的表格内容展示 #}
              <table class="table table-hover">
                  <thead>
                       <tr>
                                 <th> title_name </th>
                       </tr>
                  </thead>
                  <tbody>
                        <tr> </tr>
                  </tbody>
              </table>
          </div>
    </div>
{% endblock %}

编写二级页面视图函数

内容如下:

def display_objects(request, app_name, table_name):
    return render(request, 'king_admin/table_objs.html')

在首页中添加链接入口

我们还要在首页文件中添加入口标签<a></a>,具体内容如下:

table_index.html文件添加内容如下:

...
 <tbody>
                            {% for table_name, admin in table_names.items %}
                                <tr>
                                    {#1.链接:url/应用名/表名,2. 显示中文表名--使用自定义标签进行处理#}
                                    <td><a href="{% url 'display_objects' app_name table_name %}">{% render_verbose_name admin %}</a></td>
                                    <td>添加</td>
                                    <td>修改</td>
                                </tr>
                            {% endfor %}
                        </tbody>
						
...

这样,我们就能够通过首页进入到二级页面了,当然现在的二级页面还什么都没有,如图:

添加二级页面显示内容

二级页面中,我们看到有很多的内容,这里先添加显示表格的相关内容。

原生admin添加显示内容分析

我们之前在原生的admin中进行注册时,添加了以下内容:

 

#自定义操作
class CustomerAdmin(admin.ModelAdmin):
	#显示字段
    list_display = ('name', 'id','qq','source','consultant','content','status','date')
    #过滤
	list_filter = ('source','consultant','date')
    #搜索
	search_fields = ('qq','name')
    raw_id_fields = ('consult_course',)
    #水平显示
	filter_horizontal = ('tags',)
    #可编辑
	list_editable = ('status',)
class UserProfileAdmin(admin.ModelAdmin):
    list_display = ('user','name')

king_admin中添加显示字段

在我们自己编写的admin中添加:

#自定义类,显示特定字段
class CustomerAdmin(BaseAdmin):
	#显示字段
    list_display = ['qq','name','source','consultant','consult_course','date','status']
	#过滤
    list_filters = ['source','consultant','consult_course','status']
    #model = models.Customer
class CustomerFollowUpAdmin(BaseAdmin): list_display = ('customer','consultant','date')

  过滤是后边的内容,当前可以不加。

根据字段提取数据

要显示的字段都有了,接下要根据这些字段到数据库中获取数据,并在模板渲染即可!

编写视图函数即可:

def display_objects(request, app_name, table_name):
    #获取自定义的admin_class
    admin_class = enabled_admins[app_name][table_name]
    #数据查询
    query_set = admin_class.model.objects.all()

    return render(request, 'king_admin/table_objs.html',
                                 {'admin_class': admin_class,
                                  'query_set': query_set})

模板添加数据并渲染

在二级页面的模板中,添加如下内容:

{% extends 'king_admin/table_index.html' %}
{% load tags %}
{% block container %}
    <div class="panel panel-info">
          <div class="panel-heading">
            <h3 class="panel-title">Panel title</h3>
          </div>
          <div class="panel-body">
               <div class="row">
               </div>
              {#具体的表格内容展示 #}
              <table class="table table-hover">
                  <thead>
                       <tr>
                            {% for title_name in admin_class.list_display %}
                                 <th>{{ title_name }}</th>
                            {% endfor %}
                       </tr>
                  </thead>
                  <tbody>
                      {% for item in query_set %}
                        <tr>
                            {#创建列表行数据#}
                            {% create_row item admin_class %}
                        </tr>
                      {% endfor %}
                  </tbody>
              </table>
          </div>
    </div>
{% endblock %}

文件内容分析:

  • 自定义标签
    使用它原因和首页是一样的,这里不再赘述!

自定义标签文件的内容:

from  django  import template
from  django.utils.safestring import mark_safe
register = template.Library()
#------------------------显示表名称-->中文---------------------------
@register.simple_tag
def render_verbose_name(admin_class):
    return admin_class.model._meta.verbose_name
#-------------------------创建表格行数据-----------------------------
@register.simple_tag
def create_row(query_set_obj, admin_class):
    #创建标签元素--空,None不行
    element = ''

    #遍历要显示的models字段
    for row in admin_class.list_display:
    #获取显示字段对应的字段对象
        field_obj = admin_class.model._meta.get_field(row)
    #获取数据
        #判断choice
        if field_obj.choices:
            #通过反射获取对象里面的值,并执行该方法get_字段_display()获取choices里面的数值
            row_data = getattr(query_set_obj, 'get_{0}_display'.format(row))()
        else:
            row_data = getattr(query_set_obj, row)

        #时间格式转换
        if type(row_data).__name__ == 'datetime':
            row_data = row_data.strftime('%Y-%m-%d %H-%M-%S')

        #标签元素的拼接
        element += "<td>{0}</td>".format(row_data)
    return mark_safe(element)

页面显示效果如下:

 

posted @ 2017-01-16 16:46  runnering  阅读(143)  评论(0)    收藏  举报