Частичные шаблоны
Часть раздела 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. Страница и эта часть используют одну и ту же разметку, поэтому они не разойдутся.
Задание
СреднеВыдавайте одну строку из /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>
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела JSON API
Потренируйтесь самостоятельно: Песочница Django