Menu
CoddyTech

Parciais de template

Parte da seção APIs JSON do Journey de Django da Coddy. Lição 14 de 19.

Um script nem sempre quer JSON. Depois de adicionar uma tarefa, ele pode pedir ao servidor o <li> dessa tarefa já pronto e inseri-lo na lista. Um template já desenha essa linha, então o servidor deve reutilizá-lo.

O Django 6.0 adicionou partials de template: um trecho nomeado de um template que você também pode renderizar sozinho. Envolva-o em {% partialdef name %} e {% endpartialdef %}; com a palavra inline, ele também é desenhado no lugar, uma vez para cada item de um loop. Uma view renderiza apenas o trecho usando o nome do template, # e o nome do partial:

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

O contexto precisa conter o que o trecho lê; neste caso, cart. A página e o trecho compartilham a mesma marcação, então não podem divergir.

challenge icon

Desafio

Médio

Exiba apenas uma linha da nova página /tasks/.

  1. Em tasks/list.html, transforme o <li> do loop em um parcial inline chamado task-row, para que /tasks/ continue exibindo todas as linhas.
  2. Em tasks/views.py, adicione task_row(request, pk): renderize apenas esse parcial, passando task, ou a página 404 do Django.
  3. Em tasks/urls.py, adicione "tasks/<int:pk>/row/" com o nome task_row.

Abra /tasks/3/row/: apenas Call the bank (done), sem título.

Experimente você mesmo

<!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 seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de APIs JSON

Pratique por conta própria: Playground de Django