我可以更改 Django 使用的默认表单名称模板吗?

Can I change the default forms name template that Django uses?

我知道 Django 为其模板引擎使用默认名称,例如,如果我有一个用于评论模型的表单,Django 将搜索 comments_form.html 以呈现该表单。但我能改变吗?我可以使用另一个 html 作为模板,而不是使用 comments_form 作为表单渲染吗?我如何使用基于 Class 的视图执行此操作?

当然,这很简单.. 每个显示模板的 Django 通用视图(继承自 TemplateResponseMixin),都可以通过 template_name 属性被告知使用哪个模板:

class MyView(FormView):
    template_name = 'myapp/mytemplate.html'

假设您使用的是标准 Django 目录布局,例如

myproject/myproject/templates/myproject/mytemplate.html
myproject/myapp/templates/myapp/mytemplate.html

等...

您还可以通过覆盖视图的 get_template_names 方法来修改这些视图的模板选择行为。

这些 TemplateResponseMixin 派生视图的最简单用法,例如 TemplateViewFormView,没有任何其他方法可以知道要使用什么模板,它们需要您指定 template_name 或实现 get_template_names 方法,否则当您尝试访问视图时会出现异常。

但是与 Django 模型一起工作的视图 类,例如 DetailViewUpdateView 等,更聪明;这些 类 将查看他们被告知要使用的模型的名称,并从中导出模板的名称,例如:

默认情况下,名为 "Comments" 的模型的 UpdateView 将尝试查找名为 "comments_form.html" 的模板。 DetailView 将尝试使用名为 "comments_detail.html"...

的模板

因此,如果您遵循他们的惯例并按照他们期望的方式命名您的模板,那么一切都会正常工作。它会自动找到您的模板。所有其他面向模型的视图 类(DeleteViewCreateView 等等)也会这样做。

但您始终可以通过使用 template_name 属性或实施 get_template_names().

来覆盖此行为

以下是可能有用的 Django 文档的确切部分: https://docs.djangoproject.com/en/2.2/ref/class-based-views/mixins-simple/#django.views.generic.base.TemplateResponseMixin.get_template_names