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.
Desafio
MédioExiba apenas uma linha da nova página /tasks/.
- Em
tasks/list.html, transforme o<li>do loop em um parcialinlinechamadotask-row, para que/tasks/continue exibindo todas as linhas. - Em
tasks/views.py, adicionetask_row(request, pk): renderize apenas esse parcial, passandotask, ou a página 404 do Django. - Em
tasks/urls.py, adicione"tasks/<int:pk>/row/"com o nometask_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>
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
2Lendo requisições
Filtrando com uma consultaCriando com POST5Projeto: Organizando o Trabalho
Projeto: PrioridadesProjeto: Limpar Tarefas ConcluídasPratique por conta própria: Playground de Django