Djang(在前端仿DjangoAdmin同样效果)

一.在app中创建python文件(例如:kings.py)

 

如图:生成的数据为{"app名":{"表名"userprofileadmin类},实际上就是admin.py中的admin.site.register(models.UserProfile,UserProfileAdmin)注册

from app01 import models

#{"app01":{"userprofile"userprofileadmin类}
enabled_admins={}
#1.创建基类
class BaseAdmin(object):
    list_display=[]
    list_filter=[]

class UserPorfileAdmin(BaseAdmin):
    list_display = ["name","user_id"]
    #model=models.Customer AAA
class RoleAdmin(BaseAdmin):
    list_display = ["name"]

'''
register函数相当于admin.site.register()
models_class._meta.app_label  app名字
models_class._meta.model_name 表名
'''
def register(models_class,admin_class=None):    #models_class是表名,admin_class相当于app01.admin中的UserProfileAdmin
    if models_class._meta.app_label not in enabled_admins:
        enabled_admins[models_class._meta.app_label]={}
    admin_class.model=models_class                #相当于上AAA===将CustomerAdmin和Customer表关联
    enabled_admins[models_class._meta.app_label][models_class._meta.model_name]=admin_class


register(models.UserProfile,UserPorfileAdmin)
register(models.Role,RoleAdmin)

 

---------------总urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path('app01/',include('app01.urls')),
    path('kingadmin/',include("kingadmin.urls")),
]
----------kingadmin-urls.py
from django.urls import path,re_path
from kingadmin import views

urlpatterns = [
    path("",views.tables),
    re_path("(\w+)/(\w+)",views.tables_info,name="tables_info"),
]
-------kingadmin-views.py

from django.shortcuts import render
from kingadmin import kings

# Create your views here.
def tables(request):
    # print(kings.enabled_admins["app01"]["userprofile"])
    return render(request,"kingadmin/tables.html",{"table_list":kings.enabled_admins})
def tables_info(request,app_name,table_name):
    return render(request,"kingadmin/table_info.html",{"table_list":kings.enabled_admins[app_name][table_name]})
-------tables.html
 <div class="panel-body">
          <div class="bs-example" data-example-id="simple-table">
            <table class="table">
                  {% for app_name,app_tables in table_list.items %}
                      <thead>
                        <tr>
                            <th>{{ app_name }}</th>
                        </tr>
                      </thead>
                      <tbody>
                        {% for table_name,admin in app_tables.items %}
                        <tr>
                            <!--此处url是当前的url:127.0.0.1:8000/kingadmin--->
                            <td><a href="{% url 'tables_info' app_name table_name %}">{% render_table_name admin %}</a></td>
                            <td>add</td>
                            <td>change</td>
                        </tr>
                        {% endfor %}
                      </tbody>
                  {% endfor %}
            </table>
          </div>
      </div>
--------tables_info.html
{%load "tags"%}
<div class="bs-example" data-example-id="simple-table"> <table class="table"> <thead> <tr> {% for filed in table_list.list_display %} <!---tabel_list是userprofileadmin类--> <td>{{ filed }}</td> <!--filed是字符串形式---> {% endfor %} </tr> </thead> <tbody> {% render_table_filed_value table_list as t%} <!--这是返回的表中所有数据--> {% for i in t %} <!--i为每一行的对象---> <tr> {% table_filed_value i table_list as f%} <!--每行得到的数据--> {{ f }} </tr> {% endfor %} </tbody> </table> </div> </div>
-------tags.py


from django import template
from django.utils.safestring import mark_safe

register = template.Library()   #register的名字是固定的,不可改变

@register.simple_tag
def render_table_name(admin_class):      #返回表名(中文)
    return admin_class.model._meta.verbose_name

@register.simple_tag
def render_table_filed_value(admin_class): #返回从models表中查询得到的数据
    data=admin_class.model.objects.all()
    return data

@register.simple_tag
def table_filed_value(obj,admin_class):
    fil_datas=""
    for data in admin_class.list_display:
        get_data=getattr(obj,data)
        fil_datas+="<td>%s</td>"%(get_data)
    return mark_safe(fil_datas)

 

转载于:https://www.cnblogs.com/gaoyukun/p/9222025.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值