На мой взгляд, я не упоминаю имя_шаблона, тогда как django решит, какую html-страницу отображать во время запроса?
Вот мой views.py:
from django.shortcuts import render
from django.views.generic import ListView, DetailView
from . models import Movie
class MovieList(ListView):
model = Movie
# template_name = 'movie_list.html'
class MovieDetail(DetailView):
model = Movie
#template_name = 'movie_detail.html'
Как показано в коде, я не упомянул имя шаблона, тогда как django узнает местоположение страницы?
когда я использую URL "http://локальный:8000/фильмы/", он отображает MovieList.html





По умолчанию Django генерирует template_name, используя название вашей модели и немного суффикс/префикс.
Например, для ListViewtemplate_name генерируется в объекте MultipleObjectTemplateResponseMixin. В твоем случае:
MovieList: movie_list.htmlMovieDetail: movie_detail.htmlfrom django.shortcuts import render
from django.views.generic import ListView, DetailView
from . models import Movie
class MovieList(ListView):
model = Movie
# template_name = 'movie_list.html'
class MovieDetail(DetailView):
model = Movie
#template_name = 'movie_detail.html'
На вашем примере -
Пример: если название модели Movie
для ListView: movie_list.html
для DetailView: movie_detail.html
для DeleteView: movie_confirm_delete.html
для CreateView и UpdateView: movie_form.html
Как видите, он берет имя модели в нижнем регистре и добавляет тип представления после подчеркивания. Вы можете поэкспериментировать, запустив приложение без шаблонов, и тогда оно выдаст ошибку DoesNotExist о том, что не может найти movie_list.html, если вы еще не сделали это в папке с шаблонами. Для всех CBV вы увидите имя html, которое хочет django.
@gaurav Да, определенно
@gaurav Также, пожалуйста, примите ответ для будущих ссылок.
Для CreateView это будет movie_create, верно? и если он генерируется по умолчанию, то когда мы используем template_name ?