Web em Python - Django - Parte 5
Autor: Julio Cesar Eiras Melanda | Publicado: 2013-08-18T08:00:00-03:00

Fala pessoal!

Vamos ao quinto artigo sobre Django? Se você ainda não leu os últimos artigos, confira aqui:


Web em Python - Django - Parte 1


Web em Python - Django - Parte 2


Web em Python - Django - Parte 3
Web em Python - Django - Parte 4 

Hoje criaremos uma tela para exibir os artigos que criarmos no noss blog.



Inicialmente, vamos melhorar a nossa classe de modelo. Vamos adicionar parâmetros para o campos da publicação para este pegar o momento da publicação automaticamente, e vamos alterar para que as publicações sejam exibidas da mais recente para a mais antiga.

Veja bem como fica nossa classe de modelo após estas alterações:


from django.db import models
from datetime import datetime

class Artigo(models.Model):
    class Meta:
        ordering = ('-publicacao',)
    titulo = models.CharField(max_length=100)
    conteudo = models.TextField()
    publicacao = models.DateTimeField(default=datetime.now, blank=True)



Adicionamos o import para datetime, criamos uma classe interna de metadados do nosso modelo, onde indicamos que artigos serão ordenados por ordem inversa de publicação (por isto o sinal de -) e colocamos os parâmetros default=datetime.now e blank=True no atributo da publicação, respectivamente para dizer que o horário padrão da publicação será o da criação do artigo.

Agora, vamos configurar a url para acessar nossos artigos. Altere o arquivo urls.py que está dentro do diretório do seu projeto (o mesmo diretório onde está o arquivo settings.py).

Observe as alterações que foram feitas:


from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
from django.views.generic import ArchiveIndexView
from meublog.models import Artigo
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'TesteProgrameemPython.views.home', name='home'),
    # url(r'^TesteProgrameemPython/', include('TesteProgrameemPython.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', ArchiveIndexView.as_view(model=Artigo, date_field='publicacao'))
)



Acrescentamos aqui a última configuração de url. O primeiro parâmetro é uma expressão regular que irá filtrar quais urls devem ser traradas pela view que vem em seguida. Neste caso, a expressão regular '^$' indica que a raiz do site será gerenciada por esta view. Depois, usamos uma view genérica do Django que já trata a exibição de publicações ordenadas por tempo. Para esta view, passamos qual o modelo que será exibido, no caso, nossa classe Artigo, e especificamos qual o atributo de data do modelo.

Seu projeto Django já sabe tratar então os acessos à raiz do site, mas ainda não temos uma página html para renderizar seu conteúdo!

Vamos então criar um diretório templates no diretório meublog, onde temos o models.py, por exemplo. Dentro do diretório templates, criamos um diretório meublog, e dentro dele um arquivo chamado artigo_archive.html.

O nome artigo_archive é um nome padrão para esta view genérica. artigo por causa do modelo que será renderizado e archive por ser uma view archive.

&nbsp;Dentro do arquivo, coloque o seguinte conteúdo:


&lt;html&gt;
 &lt;body&gt;
  &lt;h1&gt;Meu blog&lt;/h1&gt;
  {% for artigo in latest %}
   &lt;h2&gt;{{ artigo.titulo }}&lt;/h2&gt;
   {{ artigo.conteudo }}
  {% endfor %}
 &lt;/body&gt;
&lt;/html&gt;



Reparou que usamos tags diferentes das tags HTML comuns? Estas são tags Django!

Tags como {{ artigo.titulo }} são tags para acessar atributos dos objetos carregados na tela. Já tags como {% for artigo in latest %} são tags de controle, temos {% for %}, {% if %}, entre outras, e além disto, podemos criar nossas próprias tags.

Vamos ver o resultado?

Levante o servidor e veja no seu browser!

python manage.py runserver

Acesse http://localhost:8000 




E aí? Gostaram? Fácil?

Ficamos por aqui com o Django. Pretendo me aprofundar mais no assunto futuramente, mas como ainda temos outros frameworks para tratar, acho que esta base já é suficiente para vocês começarem a criar seus próprios projetos em Django!

Semana que vem falamos de Flask! 

Não se esqueçam de deixar opiniões e sugestões nos comentários!

Muito obrigado!

Abraços e até o próximo artigo!