在中mysite/admin.py,创建以下子类AdminSite:
from django.contrib.admin import AdminSite
class CustomAdminSite(AdminSite):
# set values for `site_header`, `site_title`, `index_title` etc.
site_header = 'Custom Admin Site'
...
# extend / override admin views, such as `index()`
def index(self, request, extra_context=None):
extra_context = extra_context or {}
# do whatever you want to do and save the values in `extra_context`
extra_context['world'] = 'Earth'
return super(CustomAdminSite, self).index(request, extra_context)
custom_admin_site = CustomAdminSite()
确保导入custom_admin_site在admin.py你的应用程序并注册它的模型在您的自定义管理网站显示它们(如果你愿意的话)。
在中mysite/apps.py,创建的子类,AdminConfig并从上一步中将其设置default_site为admin.CustomAdminSite:
from django.contrib.admin.apps import AdminConfig
class CustomAdminConfig(AdminConfig):
default_site = 'admin.CustomAdminSite'
在mysite/settings.py,替换django.admin.site在INSTALLED_APPS用apps.CustomAdminConfig(来自之前的步骤自定义管理应用程序配置)。
在中mysite/urls.py,admin.site.urls从管理URL 替换为custom_admin_site.urls
from .admin import custom_admin_site
urlpatterns = [
...
path('admin/', custom_admin_site.urls),
# for Django 1.x versions: url(r'^admin/', include(custom_admin_site.urls)),
...
]
在templates目录中创建要修改的模板,并保持docs中指定的默认Django管理模板目录结构。例如,如果要修改admin/index.html,请创建文件templates/admin/index.html。
所有现有模板都可以通过这种方式进行修改,并且它们的名称和结构可以在Django的源代码中找到。
现在,您可以通过从头开始编写模板来覆盖模板,也可以对其进行扩展,然后覆盖/扩展特定的块。
例如,如果您想将所有内容保持原样但要覆盖该content块(在索引页面上列出了您注册的应用及其模型),则将以下内容添加到中templates/admin/index.html:
{% extends 'admin/index.html' %}
{% block content %}
<h1>
Hello, {{ world }}!
</h1>
{% endblock %}
要保留块的原始内容,请{{ block.super }}在希望显示原始内容的任何位置添加:
{% extends 'admin/index.html' %}
{% block content %}
<h1>
Hello, {{ world }}!
</h1>
{{ block.super }}
{% endblock %}
您还可以通过修改extrastyle和extrahead块来添加自定义样式和脚本。