Замена шаблона виджета 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
. Дополнительную информацию об этом см. В документах.