Я не смог найти ни одного ответа или раздела в официальных документах Django, в котором была бы вся информация, необходимая мне для переопределения / расширения шаблонов администратора по умолчанию, поэтому я пишу этот ответ как полное руководство, надеясь, что это будет полезно для других в будущем.
В 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
in 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
каталоге, сохранив структуру каталогов шаблонов администратора 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
блоки.