Как выглядят представления на основе классов?
Давайте создадим представление на основе класс для статей, вместо представления на основе функции.
views/articles.py
from django.views.generic import ListView
class ArticleListView(ListView):
model = Article
template_name = 'modules/blog/articles/article-list.html'
context_object_name = 'articles'
Пояснение:
- Наследуемся от ListView класса, это представление будет обрабатывать наш список.
- model - название нашей модели, Article.
- template_name - название нашего шаблона
- context_object_name - передаем список для перебора.
Функцию article_list можно удалить
views/articles.py
def article_list(request):
articles = Article.objects.all()
return render(request, 'modules/blog/articles/article-list.html', {'articles': articles})
Идем в urls.py и изменяем с
urlpatterns = [
path('', article_list, name='article-list'),
]
на
from modules.blog.views import ArticleListView
urlpatterns = [
path('', ArticleListView.as_view(), name='article-list'),
]
Пояснения:
- Мы изменили article_list на ArticleListView, импортировав из views/articles.py, и добавили as_view()
Давайте ещё добавим название заголовка <title></title> в нашем представлении для данной главной странички?
Модернизируем наше представление:
views/articles.py
class ArticleListView(ListView):
model = Article
template_name = 'modules/blog/articles/article-list.html'
context_object_name = 'articles'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = 'Главная страница'
return context
Пояснения:
- Добавляем в наш словарь title, который непосредственно выводим для обработки в шаблоне.
И в main.html изменим на:
<title>{{ title }}</title>
Давайте запустим и посмотрим на результат.

Как видите, все работает в том же виде, как и должно быть, ещё и с заголовком.
В следующем уроке мы добавим ещё одну статью, попробуем вывести картинку, и напишем функцию для изменения ее имени при загрузке.