Мини-блог на Django 4: вывод записей на главную

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

Подготовка проекта

В админке существует одна запись. Главная страница сайта отображает стандартную приветственную страницу Django, которую заменим на вывод записей.

Представление данных (views.py)

В файле views.py импортируем необходимые классы:

from django.views.generic import View
from .models import Post

Создадим класс PostView, наследующий View:

class PostView(View):
    """Вывод записей."""

    def get(self, request):
        posts = Post.objects.all()
        return render(request, 'blog/blog.html', {'post_list': posts})

Метод get получает все объекты из модели Post и передаёт их в шаблон blog/blog.html в словаре под ключом post_list. Функция render объединяет шаблон с данными и возвращает HTTP-ответ.

Шаблон (blog/blog.html)

Создадим директорию templates/blog в корне проекта и файл blog.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Мини-блок</title>
</head>
<body>
    {% for post in post_list %}
        <h3>{{ post.title }}</h3>
        <p>{{ post.description }}</p>
        <p>Автор: {{ post.author }}</p>
    {% endfor %}
</body>
</html>

Шаблон использует цикл for для перебора записей из post_list и выводит заголовок (title), описание (description) и автора (author) каждой записи.

Настройка шаблонов в settings.py

В файле settings.py укажем путь к директории с шаблонами:

import os

TEMPLATES = [
    # ...
    {
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        # ...
    },
]

Настройка URL (urls.py)

Создадим файл urls.py в приложении blog:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.PostView.as_view()),
]

В главном файле urls.py проекта подключим URL-адреса приложения blog:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]

Функция include встраивает URL-адреса из других файлов.

Проверка

Запустим сервер и проверим работу. На главной странице отображаются все записи из базы данных. При необходимости можно улучшить визуальное оформление вывода данных в шаблоне.

Что будем искать? Например,программа