Pular para o conteúdo
murad.guide

Aplicações Web

Capítulo 21

Django: views e templates

2 min de leitura 391 palavras 1 gravura

Neste capítulo você vai listar posts numa página com template seguro. O projeto-fio é o Ateliê Boa Viagem, ateliê digital fictício em Boa Viagem, Recife.

Seu ponto de partida

Use o exemplo 21-django-views do pacote anexo e copie inicio/ para uma pasta de prática fora do original. A raiz do exemplo é a referência completa desta etapa.

Use servidor só em 127.0.0.1 quando o README do exemplo pedir HTTP local. Abrir ou testar não publica nada.

Como praticar

Leia → copie ou digite → mude uma coisa → preveja → salve → recarregue → confira. Restaure cada experiência antes da próxima. Faça as atividades antes de abrir as respostas comentadas.

Mapa visual de Django: views e templates

View lista posts

A view busca Post.objects.all() e entrega ao template.

Faça na sua cópia

Confira o trecho no contexto do exemplo antes de mudar.

def lista(request):
    posts = Post.objects.all().order_by('-publicado_em')
    return render(request, 'posts/lista.html', {'posts': posts})

Mude uma coisa e preveja

Ordene por título.

Anote o que espera observar antes de salvar e recarregar.

Recarregue e confira

A ordem na página muda.

Se não acontecer

Ligue a URL no urls.py.

Template com escape

{{ post.titulo }} escapa HTML por padrão. Não desligue autoescape sem necessidade.

Faça na sua cópia

Confira o trecho no contexto do exemplo antes de mudar.

{% for post in posts %}
  <article><h2>{{ post.titulo }}</h2></article>
{% empty %}
  <p>Nenhuma publicação ainda.</p>
{% endfor %}

Mude uma coisa e preveja

Mostre o autor no cartão.

Anote o que espera observar antes de salvar e recarregar.

Recarregue e confira

Autor aparece.

Se não acontecer

Passe o campo no contexto via modelo.

runserver em 127.0.0.1

python manage.py runserver 127.0.0.1:8000

Faça na sua cópia

Confira o trecho no contexto do exemplo antes de mudar.

python manage.py runserver 127.0.0.1:8000

Mude uma coisa e preveja

Abra a lista no navegador.

Anote o que espera observar antes de salvar e recarregar.

Recarregue e confira

Página do blog carrega.

Se não acontecer

Não use 0.0.0.0.

Atividades

Atividade 1

O que render faz?

Atividade 2

Por que o escape padrão importa?

Atividade 3

Qual host:porta o volume manda?

Respostas comentadas

Resposta da atividade 1

Junta template + contexto numa resposta HTTP.

Resposta da atividade 2

Reduz risco de XSS com dados inesperados.

Resposta da atividade 3

127.0.0.1:8000

O arquivo completo

Referência do exemplo 21-django-views, reproduzida aqui para que você possa conferir sem sair da página.

manage.py

#!/usr/bin/env python
import os, sys
def main():
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "atelie.settings")
    from django.core.management import execute_from_command_line
    execute_from_command_line(sys.argv)
if __name__ == "__main__":
    main()

posts/templates/posts/lista.html

<!DOCTYPE html>
<html lang="pt-BR"><head><meta charset="utf-8"><title>Blog do Ateliê</title></head>
<body>
<h1>Blog do Ateliê Boa Viagem</h1>
{% for post in posts %}
<article><h2>{{ post.titulo }}</h2><p>{{ post.autor }}</p><p>{{ post.texto }}</p></article>
{% empty %}<p>Nenhuma publicação ainda.</p>{% endfor %}
</body></html>