Django小部件模板替代不会在项目模板目录中搜索。怎么修?

【字号: 日期:2024-03-07浏览:23作者:雯心
如何解决Django小部件模板替代不会在项目模板目录中搜索。怎么修??

默认情况下,该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”时却没有这样做。有任何想法吗?

相关文章: