Menu
CoddyTech

Template-Partial-Vorlagen

Teil des Abschnitts JSON-APIs der Django-Journey von Coddy. Lektion 14 von 19.

Ein Skript benötigt nicht immer JSON. Nachdem eine Aufgabe hinzugefügt wurde, kann es den Server um das fertige <li> für diese Aufgabe bitten und es in die Liste einfügen. Eine Vorlage stellt diese Zeile bereits dar, daher sollte der Server sie wiederverwenden.

Django 6.0 führte Template-Teile ein: einen benannten Teil einer Vorlage, den du auch allein rendern kannst. Umschließe ihn mit {% partialdef %}; inline stellt ihn außerdem direkt an Ort und Stelle dar, bei jedem Durchlauf einer Schleife. Eine View rendert nur den Teil, indem sie den Namen der Vorlage, # und den Namen des Template-Teils angibt:

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

Der Kontext muss enthalten, was der Teil ausliest, hier cart. Die Seite und der Teil verwenden dasselbe Markup, sodass sie nicht auseinanderdriften können.

challenge icon

Aufgabe

Mittel

Gib eine einzelne Zeile von /tasks/ separat aus:

  • Mach in list.html das <li> zu einem Partial namens task-row, das weiterhin für jede Aufgabe gerendert wird.
  • Eine View task_row(request, pk), die nur dieses Partial rendert und bei einer nicht vorhandenen Aufgabe den Status 404 zurückgibt.
  • Die Route "tasks/<int:pk>/row/" mit dem Namen task_row.

Klicke auf „Run“ und rufe dann /tasks/1/row/ auf: eine Zeile.

Probier es selbst

<!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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in JSON-APIs

Übe selbstständig: Django-Playground