Конечно, это очень просто ... каждому универсальному представлению 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
производных представлений, таких как TemplateView
и FormView
, не имеют другого способа узнать, какой шаблон использовать, они требуют либо указать template_name
, либо реализовать метод get_template_names
, иначе вы получите исключение при попытке доступа к представлению.
Но классы представлений, которые работают с моделями Django, такими как DetailView
, UpdateView
и т. Д., Более умны; Эти классы будут смотреть на имя модели, с которой им говорят работать, и получат имя шаблона из этого, например:
UpdateView
для модели с именем "Comments" попытается найти шаблон с именем "comments_form.html" по умолчанию. A DetailView
попытается использовать шаблон с именем "comments_detail.html" ...
Так что, если вы будете следовать их соглашению и назовете свой шаблон так, как они ожидают, тогда все просто работает ... он найдет ваш шаблон автоматически. Все другие классно-ориентированные классы представления (DeleteView
, CreateView
и т. Д.) Также будут делать это.
Но вы всегда можете переопределить это поведение, используя атрибут 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