Menu
CoddyTech

Parziali di template

Fa parte della sezione API JSON del percorso Django di Coddy. Lezione 14 di 19.

Uno script non vuole sempre JSON. Dopo aver aggiunto un'attività, può chiedere al server il relativo <li> già pronto e inserirlo nell'elenco. Un template disegna già quella riga, quindi il server dovrebbe riutilizzarlo.

Django 6.0 ha aggiunto i partial di template: una parte denominata di un template che puoi anche renderizzare da sola. Racchiudila tra {% partialdef name %} e {% endpartialdef %}; con la parola inline viene anche disegnata sul posto, una volta per ogni elemento di un ciclo. Una vista renderizza solo la parte indicando il nome del template, # e il nome del partial:

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

Il contesto deve contenere ciò che la parte legge, in questo caso cart. La pagina e la parte condividono lo stesso markup, quindi non possono divergere.

challenge icon

Sfida

Medio

Servono da soli una riga della nuova pagina /tasks/.

  1. In tasks/list.html, rendi il <li> nel ciclo una parte parziale inline denominata task-row, in modo che /tasks/ continui a visualizzare tutte le righe.
  2. In tasks/views.py, aggiungi task_row(request, pk): visualizza solo quella parte parziale, passando task, oppure la pagina 404 di Django.
  3. In tasks/urls.py, aggiungi "tasks/<int:pk>/row/" con il nome task_row.

Apri /tasks/3/row/: solo Call the bank (done), senza intestazione.

Provalo tu

<!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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di API JSON

Esercitati da solo: Playground Django