Menu
CoddyTech

Частичные шаблоны

Часть раздела JSON API путешествия по Django на Coddy. Урок 14 из 19.

Скрипту не всегда нужен JSON. После добавления задачи он может запросить у сервера готовый <li> для этой задачи и вставить его в список. Шаблон уже формирует эту строку, поэтому серверу следует использовать её повторно.

В Django 6.0 появились частичные шаблоны: именованная часть шаблона, которую также можно отрендерить отдельно. Оберните её в {% partialdef %}; inline также отрисовывает её на месте при каждом проходе цикла. Представление рендерит только эту часть, указав имя шаблона, # и имя частичного шаблона:

{% partialdef cart-total inline %}
    <strong>{{ cart.total }}</strong>
{% endpartialdef %}
return render(request, "shop/cart.html#cart-total", {"cart": cart})

Контекст должен содержать всё, что считывает эта часть, в данном случае cart. Страница и эта часть используют одну и ту же разметку, поэтому они не разойдутся.

challenge icon

Задание

Средне

Выдавайте одну строку из /tasks/ отдельно:

  • В list.html сделайте <li> частичным шаблоном с именем task-row, который по-прежнему отображается для каждой задачи.
  • Представление task_row(request, pk), которое отображает только этот частичный шаблон и возвращает 404, если задача не найдена.
  • Маршрут "tasks/<int:pk>/row/" с именем task_row.

Нажмите Run, затем откройте /tasks/1/row/: одна строка.

Попробуйте сами

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>All tasks</title>
</head>
<body>
    <h1>All tasks</h1>
    <ul id="tasks">
        {% for task in tasks %}
            <li id="task-{{ task.id }}">{{ task.title }}{% if task.done %} (done){% endif %}</li>
        {% endfor %}
    </ul>
</body>
</html>
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела JSON API

Потренируйтесь самостоятельно: Песочница Django