Предположим, что следующие posts / views.py:
# posts/views.py
from django.views.generic import ListView from .models import Post
class HomePageView(ListView):
model = Post
template_name = 'home.html'
В первой строке мы импортируем ListView, а во второй строке нам нужно явно указать, какую модель мы используем. В представлении мы создаем подкласс ListView, указываем имя нашей модели и указываем ссылку на наш шаблон. Внутренне ListView возвращает объект с именем object_list , который мы хотим отобразить в нашем шаблоне.
В нашем файле шаблонов home.html мы можем использовать цикл for языка шаблонов Django для перечисления всех объектов в object_list
Почему object_list? Это имя переменной, которую ListView возвращает нам.
Давайте посмотрим на наши шаблоны / home.html
<!-- templates/home.html -->
<h1>Message board homepage</h1>
<ul>
{% for post in object_list %}
<li>{{ post }}</li>
{% endfor %}
</ul>
Вы видите object_list выше? Это не очень дружелюбное имя?
Чтобы сделать его более удобным для пользователя, мы можем вместо этого предоставить явное имя, используя context_object_name .
Это помогает любому другому, читающему код, понять, что является переменной в контексте шаблона, плюс его намного легче читать и понимать.
Итак, давайте вернемся к нашему posts / views.py и изменим его, добавив одну строку ниже:
context_object_name = 'all_posts_list' # <----- new
Итак, наш новый views.py выглядит следующим образом:
# posts/views.py
from django.views.generic import ListView from .models import Post
class HomePageView(ListView): model = Post
template_name = 'home.html'
context_object_name = 'all_posts_list' # <----- new
И давайте не забудем обновить наш шаблон сейчас:
<!-- templates/home.html -->
<h1>Message board homepage</h1>
<ul>
{% for post in all_posts_list %}
<li>{{ post }}</li>
{% endfor %}
</ul>
Вы могли бы оставить как object_list, и он все равно работал бы, но вы поняли.