Django 3: Вывод данных из БД (Урок 8)

Два способа получения данных из базы данных

Django предоставляет два способа получения записей из таблиц базы данных и отображения их на страницах HTML. Рассмотрим простой вариант: использование функции для получения данных из таблицы (в нашем случае, news) и отображение этих данных в HTML-шаблоне. Более сложные варианты, использующие специализированные классы, будут рассмотрены в последующих уроках.

Получение данных и передача в шаблон

Откройте файл views.py приложения news. Импортируем модель:

from .models import Articles

В методе views создадим объект:

news = Articles.objects.all()

Эта строка получает все объекты из таблицы articles. Эти объекты передаются в шаблон.

Отображение данных в шаблоне

Перейдем к шаблону. Заменим существующий код:

{{ news }}

После обновления страницы, вероятно, возникнет ошибка. Объект news нужно передавать как определённый ключ. Данные должны отобразиться корректно после обновления. Мы получим список QuerySet, содержащий статьи (добавлены три тестовые статьи). Статьи выводятся по названию (поле title).

Метод __str__

Если закомментировать метод __str__, вместо названий будет выводиться нумерация объектов (articles object 1, articles object 2 и т.д.).

Для красивого вывода реализуем метод __str__:

def __str__(self):
    return f"Новость: {self.title}"

Этот метод определяет, какая информация будет выводиться при выводе объекта. Можно создавать отформатированные строки.

Итерация по списку записей и вывод данных

Для вывода каждой записи в цикле, добавим следующий код:

<h1>Список новостей</h1>
{% for element in news %}
    <div class="alert alert-warning">
        <h3>{{ element.title }}</h3>
        <p>{{ element.anons }}</p>
    </div>
{% endfor %}

Здесь используется цикл for для перебора списка news и вывода title и anons каждой статьи. Добавлены стили для блока alert-warning.

Обработка отсутствия записей и сортировка

В файле news/home.html добавим условие для отображения сообщения «У вас нет записей», если список news пуст:

{% if news %}
    <!-- Вывод списка новостей -->
{% else %}
    <p>У вас нет записей</p>
{% endif %}

Записи можно сортировать с помощью метода order_by:

news = Articles.objects.order_by('title') # Сортировка по полю title
news = Articles.objects.order_by('-title') # Сортировка по полю title в обратном порядке
news = Articles.objects.order_by('date') # Сортировка по полю date

Ограничение количества записей осуществляется с помощью срезов:

news = Articles.objects.all()[:1] # Одна запись
news = Articles.objects.all()[:2] # Две записи

В данном случае срез не нужен, поэтому оставим news = Articles.objects.all(). В шаблонизаторе можно использовать комментарии:

{# Это комментарий #}

Рассмотрен простой способ вывода записей из базы данных в Django, включая сортировку, ограничение выборки и обработку случая отсутствия записей. Более продвинутые методы будут рассмотрены в следующих уроках.

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