我实现了一个带有自定义标题的自定义管理站点,并且在查看“主页”和“应用”视图时,一切都进行得很好。但是,当我检查“模型”实例时,标题将恢复为默认值。
该如何解决?我做错了什么,还是认为这是Django中的错误是合理的?
(为使您的生活更轻松,我将MCVE上传到了GitHub,但相关代码如下:https://github.com/gregschmit/customadminfail)
制作一个新项目和应用程序,并在该应用程序的文件sites.py
中:
from django.contrib import admin
class CustomSite(admin.AdminSite):
site_header = 'Custom Header'
site_title = 'Custom Title'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._registry.update(admin.site._registry)
custom_site = CustomSite('custom_admin')
然后,在您的项目URL配置urls.py
中:
from django.contrib import admin
from django.urls import path
from adminfail.sites import custom_site
urlpatterns = [
path('custom_admin/', custom_site.urls),
]
另外,将应用程序添加到INSTALLED_APPS
中的settings.py
中。
然后,如果从命令行创建超级用户并运行应用程序,则在检查Model实例时,您将看到自定义标头恢复为默认值。
答案 0 :(得分:0)
好的,所以我终于弄清楚我做错了什么。我正在从默认管理站点复制注册表,但是注册表是模型及其ModelAdmin
实例之间的映射,并且ModelAdmin
实例具有属性admin_site
,该属性告诉Django哪个{{1 }}是在下面注册的。因此,为解决此问题,我简单地复制了AdminSite
并将ModelAdmin
属性设置为我的admin_site
。如果您更改其他内容,最好CustomSite
使用,这是一种未经测试的技巧/黑客,可能会带来其他后果,但是现在一切工作都非常好。
这是deepcopy
中的代码:
CustomSite