Переопределение шаблонов
В вашем проекте вы, возможно, захотите переопределить шаблон в другом приложении Django, будь то стороннее приложение или приложение contrib, например django.contrib.admin. Вы можете поместить переопределения шаблонов в директорию templates вашего проекта или в директорию templates приложения.
Если у вас есть директории app и project templates, которые оба содержат переопределения, стандартный загрузчик шаблонов Django попытается сначала загрузить шаблон из директории проекта. Другими словами, DIRS ищется перед APP_DIRS.
См. также
Прочитайте Переопределение встроенных шаблонов виджетов, если вы хотите это сделать.
Переопределение из директории templates проекта
Сначала мы рассмотрим переопределение шаблонов, создав шаблоны-замены в директории templates вашего проекта.
Предположим, вы пытаетесь переопределить шаблоны стороннего приложения, называемого blog, которое предоставляет шаблоны blog/post.html и blog/list.html. Соответствующие настройки вашего проекта будут выглядеть так:
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
INSTALLED_APPS = [
...,
'blog',
...,
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
...
},
]
Настройка TEMPLATES и BASE_DIR уже будут существовать, если вы создали свой проект с помощью шаблона проекта по умолчанию. Настройка, которую нужно изменить, это DIRS.
Эти настройки предполагают, что у вас есть директория templates в корне вашего проекта. Чтобы переопределить шаблоны для приложения blog, создайте папку в директории templates и добавьте файлы шаблонов в эту папку:
templates/
blog/
list.html
post.html
Загрузчик шаблонов сначала ищет шаблоны в директории DIRS. Когда представления в приложении blog запрашивают шаблоны blog/post.html и blog/list.html, загрузчик вернёт только что созданные вами файлы.
Переопределение из директории шаблонов приложения
Поскольку вы переопределяете шаблоны, расположенные вне одного из приложений вашего проекта, чаще используется первый метод, и переопределения шаблонов помещаются в папку templates проекта. Однако, по желанию, можно поместить переопределения в директорию шаблонов приложения.
Сначала убедитесь, что ваши настройки шаблонов проверяют содержимое директорий приложений:
TEMPLATES = [
{
...,
'APP_DIRS': True,
...
},
]
Если вы хотите поместить переопределения шаблонов в приложение, называемое myapp, а шаблоны для переопределения называются blog/list.html и blog/post.html, структура вашей директории будет выглядеть так:
myapp/
templates/
blog/
list.html
post.html
С APP_DIRS установленным в значение True, загрузчик шаблонов будет искать шаблоны в директории шаблонов приложения и найдёт их.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/2.2/howto/overriding-templates/