Django AdminSite переопределяет шаблон администратора
Я попытался пройти учебник по Django, и там говорится, что вы можете переопределить шаблоны Django с предоставлением примера, как изменить заголовок страницы администратора ( здесь). Когда я попробовал, ничего не изменилось, так что я пошел в Google и исследовал.
В настоящее время структура моего проекта выглядит следующим образом (django_trial - это название моего проекта):
- django_trial/
- django_trial/
- polls/
- ...
- templates/
- admin/
- base_site.html (copy of template from Django with modified title)
- base_site.html (copy of admin/base_site.html from above, just in case)
- venv
Я попытался посмотреть, какой шаблон он загружает, поэтому я поместил код ниже в свой polls/admin.py
from django.template.loader import get_template
a = get_template("admin/base_site.html")
print(repr(a.origin))
и он напечатал
<Origin name='/home/my_username/Projects/django_trial/templates/admin/base_site.html'>
, так что моя переопределение шаблона, похоже, работает несколько корректно.
Затем я попробовал изменить фактические файлы библиотеки, и изменение оригинального .../venv/lib/python3.10/site-packages/django/contrib/admin/templates/admin/base_site.html
также ничего не дало.
В конце концов, мне удалось изменить заголовок страницы администратора, когда я изменил .../venv/lib/python3.10/site-packages/django/contrib/admin/sites.py
. Есть класс AdminSite
и в нем есть строка
site_header = gettext_lazy("Django administration")
Похоже, что она имеет наивысший приоритет, поэтому ее модификация действительно изменила заголовок страницы администратора. Что я могу сделать не так, чтобы эта строка всегда имела приоритет?
Вы можете сделать несколько вещей:
Добавьте путь к шаблону в settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # <- add this line
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},]
Для обновления заголовка администратора вы можете использовать модель администратора, предоставляемую django
просто добавьте:
from django.contrib import admin
admin.sites.AdminSite.site_header = "YOUR ADMIN HEADER"