一.在app中創建python文件(例如:kings.py)
django和vue、
?
如圖:生成的數據為{"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中的UserProfileAdminif 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_classregister(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 viewsurlpatterns = [path("",views.tables),re_path("(\w+)/(\w+)",views.tables_info,name="tables_info"), ]
-------kingadmin-views.pyfrom 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.pyfrom django import template from django.utils.safestring import mark_saferegister = 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)
?