Python: Разработка на фреймворке Django

Теория: Список (CRUD)

Любой 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.

Рекомендуемые программы