Замена шаблона виджета Django не выполняется в каталоге шаблона проекта. Как исправить?

Я пытаюсь переопределить встроенный шаблон виджета в Django 1.11. Кажется, я делаю все, что говорят документы в этом отношении, но для шаблонов виджета Django вообще не ищет в моем проекте, и я получаю ошибку TemplateDoesNotExist.

Вот что у меня для переопределения:

class MyFileWidget(widgets.FileInput):
    template_name = 'myapp/my_file_widget.html'

Шаблон определенно существует. Если я передаю шаблон на вызов рендеринга, он найдет его в порядке. Проблема - проблема путей. При вызове рендеринга из представления он проверяет следующее:

projectroot/templates/myapp/my_file_widget.html djangoroot/forms/templates/myapp/my_file_widget.html

Когда он находит шаблон в моем проекте, он отображает его. Это НЕ происходит, когда я указываю путь шаблона в классе выше. В этом случае он не проверяет мои шаблоны проектов, где файл фактически существует, и начинает проверять путь django, где это не так. Отсюда сообщение об ошибке.

Поэтому я не знаю, почему этот загрузчик проверяет мои шаблоны проектов на вызовы рендеринга, но тогда не удается это сделать при поиске "template_name" переопределения виджета. Есть идеи?

Ответ 1

По умолчанию параметр FORM_RENDERER умолчанию имеет значение 'django.forms.renderers.DjangoTemplates'.

Это проверяет каталог шаблонов ваших приложений (например, projectroot/myapp/templates/myapp/my_file_widget.html), но он не проверяет ваши каталоги шаблонов проектов (например, projectroot/templates/myapp/my_file_widget.html).

Если вы хотите использовать ту же конфигурацию, что и параметр TEMPLATES, вам следует использовать средство визуализации TemplatesSetting.

FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'

Вам также потребуется обновить параметр TEMPLATES чтобы Django все еще мог использовать встроенные шаблоны виджета. Самый простой способ сделать это - добавить django.forms в INSTALLED_APPS. Дополнительную информацию об этом см. В документах.