在中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
块来添加自定义样式和脚本。