Любой CRUD начинается со списка сущностей, которые обычно представлены в табличном виде. Чтобы его реализовать, понадобится добавить маршрут, реализовать обработчик-вью и вывести данные в шаблоне. Еще нужно добавить тесты, но после того, как разберемся с фреймворком.
Начнем с маршрута в article/urls.py:
from django.urls import path
from hexlet_django_blog.article.views import IndexView
urlpatterns = [
path('', IndexView.as_view()),
]
Следующий шаг — вью. Добавим содержимое в файл /hexlet_django_blog/article/views.py:
from django.shortcuts import render
from django.views import View
from hexlet_django_blog.article.models import Article
class IndexView(View):
def get(self, request, *args, **kwargs):
articles = Article.objects.all()[:15]
return render(request, 'articles/index.html', context={
'articles': articles,
})
Первой строкой из базы извлекаются 15 первых статей. Django автоматически определяет наличие размера списка в запросе и выполняет правильное смещение в SQL.
Следующей строкой вызывается шаблон, в который передается контекст. Он предоставляет словарь из передаваемых параметров.
Осталось добавить шаблон /hexlet_django_blog/templates/articles/index.html:
{% extends "base.html" %}
{% block content %}
<h1>Список статей</h1>
{% for article in articles %}
<h2>{{ article.name }}</h2>
<div>{{ article.body|slice:":200" }}</div>
{% endfor %}
{% endblock %}
Контекст, который передали в шаблон из контроллера, превращается в набор переменных. Именами становятся ключи, а содержимым — значения этих ключей в массиве. В нашем примере это articles
. Обращаться к этим переменным можно двумя способами: либо в директивах напрямую, либо через интерполяцию {{}}
. Последний вариант автоматически подставит вместо переменной ее значение.
Обход коллекции выполняется с помощью тега {% for %}
, который выглядит идентично for
самого Python.
Самостоятельная работа
- Выполните все шаги из теории
- Убедитесь, что при запросе страницы /articles у вас выводятся статьи, которые вы создали ранее
- Добавьте в общий макет меню, в котором есть ссылка на articles
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.