Я не зміг знайти жодної відповіді або розділу в офіційних документах 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
в 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
.
Усі існуючі шаблони можна змінити таким чином, а їх назви та структури можна знайти у вихідному коді Джанго .
Тепер ви можете або замінити шаблон, написавши його з нуля, або розширити його, а потім перезаписати / розширити конкретні блоки.
Наприклад, якщо ви хотіли зберегти все як є, але хотіли б замінити 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
.