Partiels de template
Fait partie de la section API JSON du Journey Django de Coddy. Leçon 14 sur 19.
Un script ne veut pas toujours du JSON. Après avoir ajouté une tâche, il peut demander au serveur le <li> tout prêt de cette tâche et l’insérer dans la liste. Un modèle dessine déjà cette ligne, donc le serveur devrait la réutiliser.
Django 6.0 a ajouté les partials de modèle : une partie nommée d’un modèle que tu peux aussi afficher seule. Encadre-la avec {% partialdef name %} et {% endpartialdef %} ; avec le mot inline, elle est aussi affichée à son emplacement, une fois pour chaque élément d’une boucle. Une vue affiche uniquement la partie en indiquant le nom du modèle, # et le nom du partial :
{% partialdef cart-total inline %}
<strong>{{ cart.total }}</strong>
{% endpartialdef %}return render(request, "shop/cart.html#cart-total", {"cart": cart})Le contexte doit contenir ce que la partie lit, ici cart. La page et la partie partagent le même balisage, elles ne peuvent donc pas diverger.
Défi
MoyenAfficher seule une ligne de la nouvelle page /tasks/.
- Dans
tasks/list.html, transforme le<li>de la boucle en fragmentinlinenommétask-row, afin que/tasks/affiche toujours toutes les lignes. - Dans
tasks/views.py, ajoutetask_row(request, pk): affiche uniquement ce fragment en lui transmettanttask, ou la page 404 de Django. - Dans
tasks/urls.py, ajoute"tasks/<int:pk>/row/"nommétask_row.
Ouvre /tasks/3/row/ : uniquement Call the bank (done), sans titre.
Essayez vous-même
<!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>
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de API JSON
Entraînez-vous par vous-même : Playground Django