默认情况下,该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。有关更多信息,请参阅文档。
解决方法我试图覆盖Django1.11中的内置窗口小部件模板。在这方面,我似乎正在做文档中说的所有事情,但是对于小部件模板,Django根本不在我的项目中查找,并且我收到TemplateDoesNotExist错误。
这是我要覆盖的内容:
class MyFileWidget(widgets.FileInput): template_name = ’myapp/my_file_widget.html’
模板肯定在那里。如果我将模板传递给渲染调用,它将很好。问题是路径的问题。从视图调用render时,它将检查以下内容:
projectroot / templates / myapp / my_file_widget.html djangoroot / forms /templates / myapp / my_file_widget.html
当它在我的项目中找到模板时,将对其进行渲染。当我在上面的类中提供模板路径时,不会发生这种情况。在那种情况下,它不会检入文件实际存在的项目模板,而是开始检入django路径(不存在)。因此,错误消息。
因此,我不知道为什么加载器会在渲染调用时检查我的项目模板,但是在寻找小部件替代的“ template_name”时却没有这样做。有任何想法吗?