Django 3: Динамические страницы статей

Создание динамической страницы

Цель – создать страницу, доступную по URL вида /news/<число>, где <число> – динамический параметр, определяющий отображаемую статью.

Работа с записями в базе данных Django

Используем классы, наследующие предустановленные классы Django.

Класс для динамической страницы

Создадим класс, наследующий DetailView из django.views.generic. В файле views.py:

from django.views.generic import DetailView

class NewsDetailView(DetailView):
    model = Articles
    template_name = 'detailsview.html'
    context_object_name = 'article'
  • model = Articles: работа с моделью Articles.
  • template_name = ‘detailsview.html’: имя HTML-шаблона.
  • context_object_name = ‘article’: ключ для передачи данных в шаблон.

Настройка URL-адресов

В urls.py:

path('news/<int:pk>/', NewsDetailView.as_view(), name='news-detail'),
  • <int:pk>: ожидается целое число (первичный ключ).
  • pk: переменная, содержащая параметр.
  • .as_view(): обязательный метод для вызова класса в Django.
  • name=’news-detail’: имя именованного URL.

HTML-шаблон

Создадим detailsview.html:

<h1>{{ article.title }}</h1>
<p>{{ article.date }}</p>
<p>{{ article.full_text }}</p>

Отображаются заголовок, дата и полный текст статьи.

Добавление кнопки «Читать детальнее» в news-home.html

<a href="{% url 'news-detail' article.pk %}" class="btn btn-warning">Читать детальнее</a>

Используется именованный URL с первичным ключом статьи.

Динамическое изменение заголовка страницы

Для динамического изменения заголовка страницы используем article.title в шаблоне.

DetailView позволяет создавать динамические страницы с минимальным кодом. Мы создали динамическую страницу для отображения статей, добавили кнопку и реализовали динамическое изменение заголовка. Существуют и другие классы, например, ListView.

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