Создание динамической страницы
Цель – создать страницу, доступную по 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.