Создание обработчика ссылок
Для отображения отдельных статей необходим обработчик ссылок, проверяющий URL на соответствие шаблону /news/<число>. Добавим новую проверку в файл urls.py:
url(r'^news/(?P<pk>d+)$', views.NewsDetailView.as_view(), name='news-detail')
Разберем выражение:
- r’^news/’ – начало строки с /news/.
- (?P<pk>d+) – захват числового значения в именованную группу pk (первичный ключ). d+ означает одну или более цифр.
- $ – конец строки.
Выражение проверяет, что URL начинается с /news/, за которым следует одна или более цифр, представляющих первичный ключ статьи.
Создание представления (View)
Для отображения статьи используем DetailView, а не ListView. В views.py создадим представление:
from django.views.generic import DetailView
class NewsDetailView(DetailView):
model = Articles
template_name = 'news/news_post.html'
model указывает на модель Articles, template_name – на шаблон news/news_post.html.
Создание шаблона (Template)
Создадим шаблон news/news_post.html. В отличие от шаблона списка статей, здесь не нужны циклы. Для вывода информации об статье используем:
<h1>{{ article.title }}</h1>
<div class="text-info">
<p>Опубликовано: {{ article.date|date:"Y-m-d H:i:s" }}</p>
<p>{{ article.text|safe|linebreaks }}</p>
</div>
- {{ article.title }} – выводит заголовок статьи.
- {{ article.date|date:"Y-m-d H:i:s" }} – выводит дату публикации в формате YYYY-MM-DD HH:MM:SS. Фильтр date форматирует дату.
- {{ article.text|safe|linebreaks }} – выводит текст статьи. Фильтр safe разрешает HTML-теги, linebreaks преобразует символы перевода строки в HTML-теги <br>.
Результат
После обновления сервера и перехода по ссылке на конкретную статью (например, /news/1) отобразится отдельная страница со всей информацией: заголовок, дата публикации и текст.
В уроке создан функционал отображения отдельных страниц новостей, используя обработчик URL, представление DetailView и шаблон. Сайт стал функциональнее и удобнее.