Подготовка файлов и импорт библиотек
Создадим файл urls.py в приложении news. Скопируем существующий urls.py и поместим его в директорию приложения news. Удалим лишнее, оставив импорты url, include, path и добавим импорт для работы со списками:
from django.urls import path, include
from . import views
Для отображения списка новостей импортируем ListView из django.views.generic и модель Articles:
from django.views.generic import ListView
from .models import Articles
Articles — модель для представления новостных статей.
Создание обработчика ссылок
Для отображения новостей по адресу /news/ создадим обработчик с ListView:
path('', views.NewsListView.as_view(), name='news'),
NewsListView — наше представление (описано ниже).
Представление NewsListView
В views.py создадим представление NewsListView:
class NewsListView(ListView):
model = Articles
queryset = Articles.objects.order_by('-date')[:20]
template_name = 'news/post.html'
Здесь:
- model указывает на модель Articles.
- queryset запрашивает статьи, отсортированные по дате (-date) в обратном порядке (от новых к старым), ограничивая количество до 20.
- template_name указывает путь к HTML-шаблону.
Шаблон post.html
Создадим директорию templates/news/ и файл post.html. Используем цикл for для отображения каждой статьи:
{% extends 'base.html' %}
{% block content %}
<h1>Список новостей</h1>
{% for post in object_list %}
<h3><a href="{% url 'news-detail' post.id %}">{{ post.title }}</a></h3>
<p>{{ post.date|date:"d-m-Y" }}</p>
{% endfor %}
{% endblock %}
В этом коде:
- {% extends ‘base.html’ %} наследует базовый шаблон.
- {% for post in object_list %} — цикл перебора статей из object_list.
- <a href="{% url ‘news-detail’ post.id %}">{{ post.title }}</a> — ссылка на детальную страницу новости (предполагается существование соответствующего URL-шаблона и представления).
- {{ post.title }} выводит заголовок статьи.
- {{ post.date|date:"d-m-Y" }} выводит дату в формате «день-месяц-год».
- {% endfor %} закрывает цикл.
Мы создали шаблон для отображения списка новостей, научились получать данные из базы данных, сортировать и выводить их с помощью ListView и шаблонизатора Django. В следующих уроках добавим данные и протестируем функционал.