Partiels de template
Fait partie de la section API JSON du Journey Django de Coddy. Leçon 14 sur 19.
Un script n’a pas toujours besoin de JSON. Après avoir ajouté une tâche, il peut demander au serveur le <li> déjà prêt pour cette tâche et l’insérer dans la liste. Un modèle dessine déjà cette ligne, le serveur devrait donc la réutiliser.
Django 6.0 a ajouté les fragments de modèle : une partie nommée d’un modèle que vous pouvez également afficher seule. Encadrez-la avec {% partialdef %} ; inline l’affiche aussi à cet endroit, à chaque tour d’une boucle. Une vue affiche uniquement la partie en indiquant le nom du modèle, # et le nom du fragment :
{% 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 une ligne de /tasks/ seule :
- Dans
list.html, faites de<li>un fragment nommétask-row, toujours affiché pour chaque tâche. - Une vue
task_row(request, pk)qui affiche uniquement ce fragment et renvoie une erreur 404 si la tâche n’existe pas. - La route
"tasks/<int:pk>/row/", nomméetask_row.
Cliquez sur Run, puis ouvrez /tasks/1/row/ : une seule ligne.
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