Генерируют ли Django ListView шаблоны для Django-моделей автоматически?

Вот и весь код на Python, который нам нужно написать. Однако нам все еще нужно написать шаблон. Мы могли бы явно указать представлению, какой шаблон использовать, добавив атрибут template_name к представлению, но в отсутствие явного шаблона Django выведет его из имени объекта. В данном случае шаблон будет "books/publisher_list.html" - часть "books" происходит от названия приложения, определяющего модель, а часть "publisher" - это строчная версия названия модели.

Это происходит из https://docs.djangoproject.com/en/5.1/topics/class-based-views/generic-display/. после отображения PublisherListView и настройки URL. У меня есть несколько вопросов:

Изменив модель на publisher, я понимаю, что это представление смотрит на шаблон books/publisher_list. Является ли этот шаблон уже созданным Django, если это модель Django, с кодом/логикой по умолчанию для обработки отображения нескольких элементов данной модели? Или же он просто ищет шаблон с именем books/publisher_list в каталоге именных шаблонов?

Чтобы было понятно, изменение атрибута model для ListView запрашивает все экземпляры этой модели и помещает их в object_list, который является контекстом, необходимым для рендеринга шаблона (при условии, что у нас нет атрибута context_object_name)?

Я благодарен за помощь.

Сначала ответим на ваш вопрос о классе ListView, тогда да, это представление по умолчанию ищет только "appname/modelname_list.html", как, например, books/publisher_list.html, поскольку book - это название приложения, а publisher - модель приложения, определенная в models.py. Он не создает шаблон за вас, и вы должны сделать это и заполнить его всем, что хотите, хотя у вас есть доступ в контексте шаблона к переменной object_list, чтобы, например, пройтись по ней и вывести названия издательств в этом случае, Хотя есть и другая переменная publisher_list, которая является такой же, как object_list и была установлена, потому что вы предоставили значение модели, как model = Publisher, иначе эта переменная не будет определена (поскольку нет необходимости определять переменную модели для представления, которое наследуется от ListView) , но очевидно, что ее название намного лучше и лучше объясняет, что представляет собой переменная, хотя, если вы хотите и как вы упомянули, вы можете дать свое собственное имя, используя context_object_name, Итак, в заключение да ListView если предоставлен атрибут модели , он получает все записи этой модели в базе данных и устанавливает это в контексте шаблона в object_list и modelname_list ( используйте любое имя переменной, которое вы хотите в вашем шаблоне, оба доступны), затем либо ищет значение имени по умолчанию шаблона, как объяснялось выше, или если template_name атрибут template_name = books/myPublishers.html предоставлен,

то он ищет этот конкретный шаблон, как f

Теперь, во-вторых, вы можете задаться вопросом, где я могу найти все эти детали и объяснения для представлений на основе классов для следующего раза или для дальнейшей настройки, то в этом случае вы должны обратиться к документации django, которую я приведу в качестве примера в этом случае для класса ListView прямо здесь, После перехода по этой ссылке вы увидите определение класса, несколько примеров, названия методов этого класса, но самое главное - раздел предков, который действительно важен и означает, от каких классов наследует класс ListView, и щелкните на любом из них, чтобы увидеть, что это за классы и, самое главное, каковы их атрибуты, чтобы вы могли понять их и изменить для собственного использования, так, например, если вы выберете TemplateResponseMixing ссылку, которая является предком ListView (родительский класс в терминах ООП, если вы знакомы с этим), затем в разделе атрибутов отображается переменная template_name, что она делает и что вы можете использовать в своем собственном представлении позже, чтобы переопределить имя шаблона, как в примере выше. В заключение прошу прощения за очень длинный ответ и надеюсь, что он поможет.

Вернуться на верх