Django中admin在路由分发用到了属性方法,自动加载
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
]
sites.py
class XadminSite:
def __init__(self, name="admin"):
self._registry = {}
def get_urls(self):
print(self._registry)
temp1 = []
for model, admin_class_obj in self._registry.items():
app_name = model._meta.app_label
model_name = model._meta.model_name
temp1.append(path(f'{app_name}/{model_name}/', admin_class_obj.urls2),)
'''
url(r"app01/book",ModelXadmin(Book,site).urls2)
'''
print("temp1", temp1)
return temp1
@property
def urls(self):
return self.get_urls(),None,None
def registry(self, model, admin_class=None, **options):
if not admin_class:
admin_class = ModelsXadmin
self._registry[model] = admin_class(model, self) # {Book:ModelAdmin(Book),Publish:ModelAdmin(Publish)}
site=XadminSite()