Django: Шаблон новостей — Урок 8

Подготовка файлов и импорт библиотек

Создадим файл 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. В следующих уроках добавим данные и протестируем функционал.

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