Menu
CoddyTech

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

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

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

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

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

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

challenge icon

Задание

Средне

Отобрази отдельно одну строку новой страницы /tasks/.

  1. В tasks/list.html сделай <li> в цикле встроенным partial-шаблоном с именем task-row, чтобы /tasks/ по-прежнему отображала все строки.
  2. В tasks/views.py добавь task_row(request, pk): отобрази только этот partial-шаблон, передав ему task, или страницу 404 Django.
  3. В tasks/urls.py добавь маршрут "tasks/<int:pk>/row/" с именем task_row.

Открой /tasks/3/row/: только Call the bank (done), без заголовка.

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

<!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