I’m trying to override the built-in widget templates in Django 1.11. I seem to be doing everything the documentation says to do in this regard, but for widget templates, Django isn’t looking at my project at all, and I’m getting a TemplateDoesNotExist error .
This is everything I covered:
class MyFileWidget(widgets.FileInput): template_name = 'myapp/my_file_widget.html'
The template definitely exists. If I pass the template to the render call, it finds it fine. The problem is a path issue. When calling render from the view, it checks for the following:
When it finds the template in my project, it renders it. When I provide the template path in the above class, this does not happen. In this case, it does not check my project template, where the file actually exists, and starts checking the django path instead. Hence the error message.
So I don’t know why the loader is checking my project template on the render call, but not doing so when looking for the “template_name” that the widget overrides. Any ideas?
By default, the
FORM_RENDERER setting defaults to
This checks the application’s template directory (e.g.
projectroot/myapp/templates/myapp/my_file_widget.html), but not the project’s template directory (e.g.
If you want to use the same configuration as the
TEMPLATES setting, you should use the
FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'
You will also need to update your
TEMPLATES settings so that Django can still use the built-in widget templates. The easiest way to do this is to add
django.forms code> to
INSTALLED_APPS. See the documentation for details on this.