Как переопределить внешний шаблон приложения в Django? - PullRequest
1 голос
/ 30 марта 2020

Я безуспешно пытался переопределить шаблон 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 ]

0 голосов
/ 03 апреля 2020

У вас есть два варианта:

(1) В ваших настройках переставьте INSTALLED_APPS следующим образом:

INSTALLED_APPS = [
    ...
    'project',
    ...
    'captcha',
    ...
]

, так как загрузчик шаблонов будет искать в каталоге шаблонов приложения в указанном порядке INSTALLED_APPS, ваш шаблон будет найден первым.

или

(2) Перечислите папку шаблонов проекта в шаблонах [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» в ваш проект для согласованности.

Просто следите за возможными будущими изменениями этих mplates при обновлении модуля капчи.

0 голосов
/ 02 апреля 2020

Могу ли я увидеть порядок вашего INSTALLED_APPS? Может случиться так, что вы визуализируете шаблоны django-recaptcha captcha, прежде чем создавать свои собственные шаблоны. Чтобы это исправить, вы можете переместить внешнее приложение captcha в конец списка INSTALLED_APPS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...