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

时间:2019-04-10 18:03:18

标签: python django django-forms django-class-based-views

我知道Django在其模板引擎中使用默认名称,例如,如果我有一个Form for Comments Model,那么Django将会搜索comments_form.html来渲染该表单。但是我可以改变吗?除了可以使用comment_form进行表单渲染外,我还可以使用其他html作为模板吗?如何使用基于类的视图做到这一点?

1 个答案:

答案 0 :(得分:1)

当然,这非常简单。每个显示模板的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