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