Как переопределить внешний шаблон приложения в Django?
Я попытался переопределить django-recaptcha
шаблон без везения. Что я делаю не так? Мне известны шаблоны переопределения внешнего приложения в Django, но они устарели. Благодарность!
файловая структура django-recaptcha
Lib/
--site-packages/
----captcha/
------templates/
--------captcha/
----------includes/
------------js_v2_checkbox.html
моя файловая структура проекта
project/
----templates/
--------captcha/
------------includes/
----------------js_v2_checkbox.html
settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'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',
],
},
},
]
2 ответа
У вас есть два варианта:
(1) В своих настройках измените INSTALLED_APPS следующим образом:
INSTALLED_APPS = [
...
'project',
...
'captcha',
...
]
поскольку загрузчик шаблонов будет искать в каталоге шаблонов приложения в порядке, указанном INSTALLED_APPS, ваш шаблон будет найден первым.
или
(2) Перечислите папку шаблонов проекта в TEMPLATES[0]['DIRS'] следующим образом:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
...
},
]
Поскольку поиск в DIRS выполняется до APP_DIRS, первым будет найден ваш шаблон.
Ссылки:
https://docs.djangoproject.com/en/3.0/howto/overriding-templates/
Другое возможное решение
Теперь я замечаю, что captcha/includes/js_v2_checkbox.html
включен captcha/widget_v2_checkbox.html
.
Я не уверен, что именно происходит, когда widget_v2_checkbox.html
загружается из модуля капчи... так что я бы продублировал "включая" widget_v2_checkbox.html
а также в папку шаблонов вашего проекта.
Вы также можете скопировать все содержимое папки "templates / captcha" в свой проект для единообразия.
Просто следите за возможными изменениями этих шаблонов в будущем при обновлении модуля captcha.
Могу я увидеть порядок вашего INSTALLED_APPS
? Возможно, вы делаетеdjango-recaptcha captcha
шаблоны перед визуализацией собственных шаблонов. Чтобы исправить это, вы можете переместить внешнее приложениеcaptcha
последний в INSTALLED_APPS
список.