Могу ли я изменить шаблон имени формы по умолчанию, который использует Django? - PullRequest
1 голос
/ 10 апреля 2019

Я знаю, что Django использует имена по умолчанию для своего механизма шаблонов, например, если у меня есть модель формы для комментариев, Django собирается искать comments_form.html для визуализации этой формы.Но могу ли я это изменить?Вместо использования comments_form для визуализации формы, я могу использовать другой HTML в качестве шаблона?Как я могу сделать это, используя представления на основе классов?

1 Ответ

1 голос
/ 10 апреля 2019

Конечно, это очень просто ... каждому универсальному представлению 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

...