Dados dinâmicos em templates

Até o momento, temos diferentes peças: o modelo Post está definido em models.py, temos post_list em views.py e o template adicionado. Mas como faremos de fato para que as postagens apareçam no nosso template em HTML? Porque é isso que nós queremos: pegar algum conteúdo (modelos salvos no banco de dados) e exibi-lo de uma maneira bacana no nosso template, certo?

E isso é exatamente o que as views devem fazer: conectar modelos e templates. Vamos precisar pegar os modelos que queremos exibir e passá-los para o template na nossa lista de postagens post_list view. Em uma view, nós decidimos o que (qual modelo) será exibido em um template.

Tudo bem, e como vamos fazer isso?

Precisamos abrir o nosso blog/views.py. Até agora, a view post_list se parece com isso:

blog/views.py

from django.shortcuts import render

def post_list(request):
    return render(request, 'blog/post_list.html', {})

Lembra de quando falamos sobre a inclusão de código que foi escrito em arquivos diferentes? Agora é o momento em que precisamos que incluir o modelo que temos escrito em models.py. Vamos adicionar a linha from .models import Post assim:

blog/views.py

from django.shortcuts import render
from .models import Post

O ponto antes de models significa diretório atual ou aplicativo atual. Tanto views.py como models.py estão no mesmo diretório. Isto significa que podemos usar . e o nome do arquivo (sem py). Em seguida, importamos o nome do modelo (Post).

E o que vem agora? Para pegar os posts reais do modelo Post, precisamos de uma coisa chamada QuerySet.

QuerySet

Você já deve estar familiarizada com o modo que os QuerySets funcionam. Nós conversamos sobre isso no capítulo QuerySets e ORM do Django.</p>

Agora queremos classificar as postagens publicadas por published_date, certo? Nós já fizemos isso no capítulo sobre QuerySets!

blog/views.py

Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')

Agora vamos colocar esse pedaço de código dentro do arquivo blog.views.py adicionando-o à função def post_list(request). Não esqueça de adicionar from django.utils import timezone antes!

blog/views.py

from django.shortcuts import render
from django.utils import timezone
from .models import Post


def post_list(request): 
    posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') 
    return render(request, 'blog/post_list.html', {})

A última parte que falta é passar a QuerySet posts para o template. Não se preocupe com isso agora, vamos falar sobre como exibi-lo em um próximo capítulo.

Note que criamos uma variável para nosso o QuerySet: posts. Esse é o nome do nosso QuerySet. De agora em diante, podemos nos referir a ele por este nome.

Na função render já temos um parâmetro request (tudo o que recebemos do usuário através da Internet) e um arquivo de template ('blog/post_list.html'). O último parâmetro -- {} -- é um lugar em que podemos acrescentar algumas coisas para o template usar. Precisamos nomear os parâmetros (continuaremos com 'posts', por enquanto). :) Deve ficar assim: {'posts': posts}. Note que a parte antes de : é uma string; por isso você precisa colocá-la entre aspas: ".

Agora, nosso arquivo blog/views.py deve ter essa cara:

blog/views.py

from django.shortcuts import render
from django.utils import timezone
from .models import Post


def post_list(request):
    posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') 
    return render(request, 'blog/post_list.html', {'posts': posts})

Pronto! Hora de voltar para o nosso template e exibir essa QuerySet!

Se quiser ler mais sobre QuerySets no Django, você deve dar uma olhada aqui: https://docs.djangoproject.com/en/2.0/ref/models/querysets/

results matching ""

    No results matching ""