Django
      Framework Web para Perfeccionistas
         Curso de Python - Sexta Aula
Bruno Gama Catão - brunogamacatao@gmail.com
O que é Django ?
• É um framework web focado em alta
  produtividade;
• Principais recursos:
  • Mapeador objeto-relacional;
  • Interface administrativa automática;
  • Design elegante de URLs;
  • Sistema de templates;
  • Sitema de cache;
  • Internacionalização.
Sites que usam Django

• Washington Post;
• Lawrence;
• Toronto Life;
• Lista de sites que usam Django:
 • http://www.djangosites.org
Instalando
•   Site oficial: http://www.djangoproject.com
•   URL para download:
    •   http://www.djangoproject.com/download/
•   Descompacte o arquivo;
•   No diretório criado digite:
    •   [Windows]: python setup.py install
    •   [Linux/MacOs]: sudo python setup.py install
Conceitos básicos

                PROJETO
Aplicação   Aplicação   Aplicação   Aplicação

Aplicação   Aplicação   Aplicação   Aplicação

Aplicação   Aplicação   Aplicação   Aplicação
Criando um projeto
• No diretório onde você for criar seus
  projetos digite:
 • django-admin.py startproject meusite
• Django criou para você os seguintes
  arquivos:
              meusite/
                  __init__.py
                  manage.py
                  settings.py
                  urls.py
Criando um projeto
• No diretório onde Lembre-se,nocriar seussão sempre
                    você foros comandos
                     digitados   prompt ou terminal !
  projetos digite:
  • django-admin.py startproject meusite
• Django criou para você os seguintes
  arquivos:
               meusite/
                   __init__.py
                   manage.py
                   settings.py
                   urls.py
Criando um projeto
           com PyDev
• Selecione a opção de menu:
 • File→New→Project ...
• Escolha:
 • Pydev→Pydev Django Project;
• No project name escreva: meusite;
• Clique em “Finish”.
Projeto criado
Entrando em detalhes
• __init__.py: Arquivo vazio que diz que ao
  Python que o diretório meusite é um módulo;
• manage.py: Arquivo contendo uma série de
  utilitários de linha de comando;
• settings.py: Configurações gerais do
  projeto;
• urls.py: Configurações das URLs do projeto.
Configurando um
     banco de dados

• Todo projeto criado com Django está
  associado a um banco de dados;
• Abra o arquivo settings.py
Definindo que banco
   de dados usar
• Procure as seguintes linhas no arquivo
  settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.',   #   ...
        'NAME': '',                        #   ...
        'USER': '',                        #   ...
        'PASSWORD': '',                    #   ...
        'HOST': '',                        #   ...
        'PORT': '',                        #   ...
    }
}
Definindo que banco
   de dados usar
• Modifique para ficar assim:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'meusite.db',
        'USER': '',                      # ...
        'PASSWORD': '',                  # ...
        'HOST': '',                      # ...
        'PORT': '',                      # ...
    }
}
Sincronizando o projeto
 com o banco de dados
• Sempre que você fizer qualquer
  modificação relativa ao banco de dados do
  seu projeto, você deve sincronizar o
  projeto com o banco de dados;
• Clique com o botão direito do mouse
  sobre o projeto e selecione:

 • Django→Sync DB
Criando o super usuário do projeto
• Todo projeto em Django tem um super usuário;
• Na primeira vez que você for sincronizar o projeto
  com o banco de dados, Django irá te perguntar se
  quer criar este super usuário:




    Digite ‘yes’, em seguida o nome do usuário, e-mail e a senha duas vezes.
Criando uma aplicação
• Como já dissemos anteriormente, um projeto
  possui uma ou mais aplicações;
• Nossa primeira aplicação será um site de notícias;
• Para criar uma aplicação, clique com o botão direito
  do mouse sobre o projeto e selecione:

  • Django→Create application;
• Digite noticias;
• Clique “OK”.
Definindo as entidades
• Edite o arquivo noticias/models.py:
from django.db import models

class Jornalista(models.Model):
    nome = models.CharField(max_length=100)

class Categoria(models.Model):
    nome = models.CharField(max_length=100)

class Noticia(models.Model):
    jornalista = models.ForeignKey(Jornalista)
    categoria = models.ForeignKey(Categoria)
    titulo     = models.CharField(max_length=200)
    texto      = models.TextField()
    data_publicacao = models.DateTimeField()
Aplicações instaladas
• Para definir que aplicações estão instaladas em um
  projeto você deve editar o arquivo settings.py;
• Localize as seguintes linhas:
     INSTALLED_APPS = (
         'django.contrib.auth',
         'django.contrib.contenttypes',
         'django.contrib.sessions',
         'django.contrib.sites',
         'django.contrib.messages',
         # Uncomment the next line to enable the admin:
         # 'django.contrib.admin',
     )
Aplicações instaladas
• Para instalar o módulo de administração
  automática descomente a última linha:

       INSTALLED_APPS = (
           'django.contrib.auth',
           'django.contrib.contenttypes',
           'django.contrib.sessions',
           'django.contrib.sites',
           'django.contrib.messages',
           'django.contrib.admin',
       )
Adicionando URLs
• É necessário adicionar uma URL para a aplicação de
    administração automática;
• Para isto modifique o arquivo meusite/urls.py:
from django.conf.urls.defaults import *

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()                        Descomente

urlpatterns = patterns('',
    # Example:
    # (r'^meusite/', include('meusite.foo.urls')),

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

    # Uncomment the next line to enable the admin:
    (r'^admin/', include(admin.site.urls)),
                                                Descomente
)
Sincronize o
      banco de dados

• Clique com o botão direito do mouse
  sobre o projeto e selecione:

 • Django→Sync DB
Testando
• Para testar se tudo correu bem, no prompt
  de comando (terminal) vá até o diretório
  onde está o arquivo manage.py do seu
  projeto e digite:
 • python manage.py runserver
• Abra seguinte endereço no seu navegador:
 • http://localhost:8000/admin/
Digite o nome e senha do seu super
             usuário.
Onde estão as minhas entidades ?
Tornando entidades
    administráveis
• Adicione no pacote meusite/noticias o
  módulo admin.py com o conteúdo:

     from meusite.noticias.models import *
     from django.contrib import admin

     admin.site.register(Jornalista)
     admin.site.register(Noticia)
     admin.site.register(Categoria)
Registrando a aplicação
• Para instalar a aplicação de notícias modifique as
  INSTALLED_APPS do arquivo meusite/settings.py:

           INSTALLED_APPS = (
               'django.contrib.auth',
               'django.contrib.contenttypes',
               'django.contrib.sessions',
               'django.contrib.sites',
               'django.contrib.messages',
               'django.contrib.admin',
               'meusite.noticias'
           )
Reinicie o servidor
• No terminal pressione CONTROL+C para
  parar o servidor;
• Inicie novamente digitando:
 • python manage.py runserver
• Abra seguinte endereço no seu navegador:
 • http://localhost:8000/admin/
Adicione algumas categorias, jornalistas e notícias.
Popule o seu banco de dados. Habitue-se com Django.
As entidades apareceram !!!



  Adicione algumas categorias, jornalistas e notícias.
Popule o seu banco de dados. Habitue-se com Django.
Algo não está muito
        bem :(
• Veja as categorias que eu adicionei:
Algo não está muito
        bem :(
• Veja as categorias que eu adicionei:


                       Tem como eu visualizar isso melhor ?
Método __unicode__
• Abra o arquivo meusite/noticias/models.py:
   from django.db import models

   class Jornalista(models.Model):
       nome = models.CharField(max_length=100)
       def __unicode__(self):
           return self.nome

   class Categoria(models.Model):
       nome = models.CharField(max_length=100)
       def __unicode__(self):
           return self.nome

   class Noticia(models.Model):
       jornalista = models.ForeignKey(Jornalista)
       categoria = models.ForeignKey(Categoria)
       titulo     = models.CharField(max_length=200)
       texto      = models.TextField()
       data_publicacao = models.DateTimeField()
       def __unicode__(self):
           return self.titulo
Resultado
Resultado
Criando as suas páginas

• Cada aplicação tem um módulo views.py;
• Aí estão todas as funções por exibir as
  páginas deste módulo;
• Cada aplicação deve ter um módulo urls.py
  que fará o mapeamento das urls para as
  funções do módulo views.py.
Hello World
• Edite o arquivo meusite/noticias/views.py:
     from django.http import HttpResponse

     def index(request):
         return HttpResponse("Hello World !")

• Crie um módulo urls.py no pacote meusite/
  noticias:
 from django.conf.urls.defaults import *

 urlpatterns = patterns('meusite.noticias.views',
     (r'^$', 'index'),
 )
Configuração das URLs
 • Abra o arquivo meusite/urls.py:
from django.conf.urls.defaults import *

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    (r'^admin/', include(admin.site.urls)),
    (r'^noticias/', include('meusite.noticias.urls')),
)
Testando


• Abra o seguinte endereço em seu
  navegador:
 • http://localhost:8000/noticias/
Utilizando templates

• Não é muito prático (e bonito) colocar o
  código HTML diretamente dentro de
  módulos Python;
• Podemos editar as páginas HTML
  externamente e utilizá-las a partir do nosso
  código.
Utilizando templates

• Crie um diretório templates na raiz do seu
  projeto;
• Crie um diretório noticias dentro do
  diretório templates;
• Edite o arquivo meusite/settings.py, localize
  a linha que contém TEMPLATE_DIRS.
TEMPLARE_DIRS
• Clique com o botão direito do mouse
  sobre o diretório templates;
• Copie a localização do diretório (Location):
Arquivo settings.py

• Altere a declaração da variável TEMPLATE_DIRS:
TEMPLATE_DIRS = (
    '/Users/brunocatao/Documents/workspace/meusite/templates'
)
Atenção
• O mundo da informática (linguagens,
  ferramentas, compiladores, etc) não foi feito para
  os acentos :(
• Portanto, é importante você estar atendo ao
  encoding que você está usando;
• Quando abrir o seu arquivo HTML para edição
  defina o encoding:
 • Selecione o menu Edit→Set Encoding...
 • Selecione Other: UTF-8.
Crie o seu template
  • Crie um arquivo chamado index.html no diretório
     templates/noticias:
<html>
	 <head>
	 	 <title>Últimas Notícias</title>
	 </head>
	 <body>
	 	 <h1>Veja as nossas últimas notícias:</h1>
	 	 <ul>
	 	 {% for noticia in noticias %}
	 	 	 <li><b>{{noticia.categoria}}</b>: {{noticia.titulo}}</li>
	 	 {% endfor %}
	 	 </ul>
	 </body>
</html>
Exibindo as notícias
  • Modifique o seu arquivo meusite/noticias/views.py:
from django.http import HttpResponse
from django.shortcuts import render_to_response, get_object_or_404
from meusite.noticias.models import *

def index(request):
  noticias = Noticia.objects.all().order_by('-data_publicacao')
  return render_to_response('noticias/index.html', {'noticias': noticias})
Exibindo o detalhe das
             notícias
      • Modifique o template index.html:
<html>
	 <head>
	 	 <title>Últimas Notícias</title>
	 </head>
	 <body>
	 	 <h1>Veja as nossas últimas notícias:</h1>
	 	 <ul>
	 	 {% for noticia in noticias %}
	 	 	 <li><a href="/noticias/noticia/{{noticia.id}}">
	 	 	 <b>{{noticia.categoria}}</b>: {{noticia.titulo}}</a></li>
	 	 {% endfor %}
	 	 </ul>
	 </body>
</html>
Crie um template para
         os detalhes
• Crie um arquivo (detalhe.html) na pasta templates/
  noticias/detalhe.html:
 <html>
 	 <head>
 	 	 <title>{{noticia.titulo}}</title>
 	 </head>
 	 <body>
 	 	 <p>{{noticia.categoria}}: {{noticia.jornalista}}</p>
 	 	 <h1>{{noticia.titulo}}</h1>
 	 	 <h2>{{noticia.texto}}</h2>
 	 </body>
 </html>
Criando a função para
            exibir o detalhe
   • Modifique o seu arquivo meusite/noticias/views.py,
      adicione a seguinte função:

def detalhe(request, noticia_id):
    noticia = get_object_or_404(Noticia, pk=noticia_id)
    return render_to_response('noticias/detalhe.html', {'noticia': noticia})
Associando a URL à
       função criada
• Modifique o arquivo meusite/noticias/urls.py:

  from django.conf.urls.defaults import *

  urlpatterns = patterns('meusite.noticias.views',
      (r'^$', 'index'),
      (r'^noticia/(?P<noticia_id>d+)/$', 'detalhe'),
  )
Testando


• Abra o seguinte endereço em seu
  navegador:
 • http://localhost:8000/noticias/
Limitando o número de
              notícias
 • Podemos limitar o número de notícias exibidas. Por
    exemplo, vamos modificar a função index do módulo
    views.py:

from django.http import HttpResponse
from django.shortcuts import render_to_response, get_object_or_404
from meusite.noticias.models import *

def index(request):
  noticias = Noticia.objects.all().order_by('-data_publicacao')[:10]
  return render_to_response('noticias/index.html', {'noticias': noticias})
Testando
• Adicione pelo menos 11 notícias e teste a
  sua aplicação;
• Experimente mudar os templates;
• Abra o seguinte endereço em seu
  navegador:
 • http://localhost:8000/noticias/

Python 06

  • 1.
    Django Framework Web para Perfeccionistas Curso de Python - Sexta Aula Bruno Gama Catão - brunogamacatao@gmail.com
  • 2.
    O que éDjango ? • É um framework web focado em alta produtividade; • Principais recursos: • Mapeador objeto-relacional; • Interface administrativa automática; • Design elegante de URLs; • Sistema de templates; • Sitema de cache; • Internacionalização.
  • 3.
    Sites que usamDjango • Washington Post; • Lawrence; • Toronto Life; • Lista de sites que usam Django: • http://www.djangosites.org
  • 4.
    Instalando • Site oficial: http://www.djangoproject.com • URL para download: • http://www.djangoproject.com/download/ • Descompacte o arquivo; • No diretório criado digite: • [Windows]: python setup.py install • [Linux/MacOs]: sudo python setup.py install
  • 5.
    Conceitos básicos PROJETO Aplicação Aplicação Aplicação Aplicação Aplicação Aplicação Aplicação Aplicação Aplicação Aplicação Aplicação Aplicação
  • 6.
    Criando um projeto •No diretório onde você for criar seus projetos digite: • django-admin.py startproject meusite • Django criou para você os seguintes arquivos: meusite/ __init__.py manage.py settings.py urls.py
  • 7.
    Criando um projeto •No diretório onde Lembre-se,nocriar seussão sempre você foros comandos digitados prompt ou terminal ! projetos digite: • django-admin.py startproject meusite • Django criou para você os seguintes arquivos: meusite/ __init__.py manage.py settings.py urls.py
  • 8.
    Criando um projeto com PyDev • Selecione a opção de menu: • File→New→Project ... • Escolha: • Pydev→Pydev Django Project; • No project name escreva: meusite; • Clique em “Finish”.
  • 9.
  • 10.
    Entrando em detalhes •__init__.py: Arquivo vazio que diz que ao Python que o diretório meusite é um módulo; • manage.py: Arquivo contendo uma série de utilitários de linha de comando; • settings.py: Configurações gerais do projeto; • urls.py: Configurações das URLs do projeto.
  • 11.
    Configurando um banco de dados • Todo projeto criado com Django está associado a um banco de dados; • Abra o arquivo settings.py
  • 12.
    Definindo que banco de dados usar • Procure as seguintes linhas no arquivo settings.py: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.', # ... 'NAME': '', # ... 'USER': '', # ... 'PASSWORD': '', # ... 'HOST': '', # ... 'PORT': '', # ... } }
  • 13.
    Definindo que banco de dados usar • Modifique para ficar assim: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'meusite.db', 'USER': '', # ... 'PASSWORD': '', # ... 'HOST': '', # ... 'PORT': '', # ... } }
  • 14.
    Sincronizando o projeto com o banco de dados • Sempre que você fizer qualquer modificação relativa ao banco de dados do seu projeto, você deve sincronizar o projeto com o banco de dados; • Clique com o botão direito do mouse sobre o projeto e selecione: • Django→Sync DB
  • 15.
    Criando o superusuário do projeto • Todo projeto em Django tem um super usuário; • Na primeira vez que você for sincronizar o projeto com o banco de dados, Django irá te perguntar se quer criar este super usuário: Digite ‘yes’, em seguida o nome do usuário, e-mail e a senha duas vezes.
  • 16.
    Criando uma aplicação •Como já dissemos anteriormente, um projeto possui uma ou mais aplicações; • Nossa primeira aplicação será um site de notícias; • Para criar uma aplicação, clique com o botão direito do mouse sobre o projeto e selecione: • Django→Create application; • Digite noticias; • Clique “OK”.
  • 17.
    Definindo as entidades •Edite o arquivo noticias/models.py: from django.db import models class Jornalista(models.Model): nome = models.CharField(max_length=100) class Categoria(models.Model): nome = models.CharField(max_length=100) class Noticia(models.Model): jornalista = models.ForeignKey(Jornalista) categoria = models.ForeignKey(Categoria) titulo = models.CharField(max_length=200) texto = models.TextField() data_publicacao = models.DateTimeField()
  • 18.
    Aplicações instaladas • Paradefinir que aplicações estão instaladas em um projeto você deve editar o arquivo settings.py; • Localize as seguintes linhas: INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', # Uncomment the next line to enable the admin: # 'django.contrib.admin', )
  • 19.
    Aplicações instaladas • Parainstalar o módulo de administração automática descomente a última linha: INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.admin', )
  • 20.
    Adicionando URLs • Énecessário adicionar uma URL para a aplicação de administração automática; • Para isto modifique o arquivo meusite/urls.py: from django.conf.urls.defaults import * # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() Descomente urlpatterns = patterns('', # Example: # (r'^meusite/', include('meusite.foo.urls')), # Uncomment the admin/doc line below and add 'django.contrib.admindocs' # to INSTALLED_APPS to enable admin documentation: # (r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: (r'^admin/', include(admin.site.urls)), Descomente )
  • 21.
    Sincronize o banco de dados • Clique com o botão direito do mouse sobre o projeto e selecione: • Django→Sync DB
  • 22.
    Testando • Para testarse tudo correu bem, no prompt de comando (terminal) vá até o diretório onde está o arquivo manage.py do seu projeto e digite: • python manage.py runserver • Abra seguinte endereço no seu navegador: • http://localhost:8000/admin/
  • 24.
    Digite o nomee senha do seu super usuário.
  • 26.
    Onde estão asminhas entidades ?
  • 27.
    Tornando entidades administráveis • Adicione no pacote meusite/noticias o módulo admin.py com o conteúdo: from meusite.noticias.models import * from django.contrib import admin admin.site.register(Jornalista) admin.site.register(Noticia) admin.site.register(Categoria)
  • 28.
    Registrando a aplicação •Para instalar a aplicação de notícias modifique as INSTALLED_APPS do arquivo meusite/settings.py: INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.admin', 'meusite.noticias' )
  • 29.
    Reinicie o servidor •No terminal pressione CONTROL+C para parar o servidor; • Inicie novamente digitando: • python manage.py runserver • Abra seguinte endereço no seu navegador: • http://localhost:8000/admin/
  • 30.
    Adicione algumas categorias,jornalistas e notícias. Popule o seu banco de dados. Habitue-se com Django.
  • 31.
    As entidades apareceram!!! Adicione algumas categorias, jornalistas e notícias. Popule o seu banco de dados. Habitue-se com Django.
  • 32.
    Algo não estámuito bem :( • Veja as categorias que eu adicionei:
  • 33.
    Algo não estámuito bem :( • Veja as categorias que eu adicionei: Tem como eu visualizar isso melhor ?
  • 34.
    Método __unicode__ • Abrao arquivo meusite/noticias/models.py: from django.db import models class Jornalista(models.Model): nome = models.CharField(max_length=100) def __unicode__(self): return self.nome class Categoria(models.Model): nome = models.CharField(max_length=100) def __unicode__(self): return self.nome class Noticia(models.Model): jornalista = models.ForeignKey(Jornalista) categoria = models.ForeignKey(Categoria) titulo = models.CharField(max_length=200) texto = models.TextField() data_publicacao = models.DateTimeField() def __unicode__(self): return self.titulo
  • 35.
  • 36.
  • 37.
    Criando as suaspáginas • Cada aplicação tem um módulo views.py; • Aí estão todas as funções por exibir as páginas deste módulo; • Cada aplicação deve ter um módulo urls.py que fará o mapeamento das urls para as funções do módulo views.py.
  • 38.
    Hello World • Editeo arquivo meusite/noticias/views.py: from django.http import HttpResponse def index(request): return HttpResponse("Hello World !") • Crie um módulo urls.py no pacote meusite/ noticias: from django.conf.urls.defaults import * urlpatterns = patterns('meusite.noticias.views', (r'^$', 'index'), )
  • 39.
    Configuração das URLs • Abra o arquivo meusite/urls.py: from django.conf.urls.defaults import * from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', (r'^admin/', include(admin.site.urls)), (r'^noticias/', include('meusite.noticias.urls')), )
  • 40.
    Testando • Abra oseguinte endereço em seu navegador: • http://localhost:8000/noticias/
  • 41.
    Utilizando templates • Nãoé muito prático (e bonito) colocar o código HTML diretamente dentro de módulos Python; • Podemos editar as páginas HTML externamente e utilizá-las a partir do nosso código.
  • 42.
    Utilizando templates • Crieum diretório templates na raiz do seu projeto; • Crie um diretório noticias dentro do diretório templates; • Edite o arquivo meusite/settings.py, localize a linha que contém TEMPLATE_DIRS.
  • 43.
    TEMPLARE_DIRS • Clique como botão direito do mouse sobre o diretório templates; • Copie a localização do diretório (Location):
  • 44.
    Arquivo settings.py • Alterea declaração da variável TEMPLATE_DIRS: TEMPLATE_DIRS = ( '/Users/brunocatao/Documents/workspace/meusite/templates' )
  • 45.
    Atenção • O mundoda informática (linguagens, ferramentas, compiladores, etc) não foi feito para os acentos :( • Portanto, é importante você estar atendo ao encoding que você está usando; • Quando abrir o seu arquivo HTML para edição defina o encoding: • Selecione o menu Edit→Set Encoding... • Selecione Other: UTF-8.
  • 46.
    Crie o seutemplate • Crie um arquivo chamado index.html no diretório templates/noticias: <html> <head> <title>Últimas Notícias</title> </head> <body> <h1>Veja as nossas últimas notícias:</h1> <ul> {% for noticia in noticias %} <li><b>{{noticia.categoria}}</b>: {{noticia.titulo}}</li> {% endfor %} </ul> </body> </html>
  • 47.
    Exibindo as notícias • Modifique o seu arquivo meusite/noticias/views.py: from django.http import HttpResponse from django.shortcuts import render_to_response, get_object_or_404 from meusite.noticias.models import * def index(request): noticias = Noticia.objects.all().order_by('-data_publicacao') return render_to_response('noticias/index.html', {'noticias': noticias})
  • 48.
    Exibindo o detalhedas notícias • Modifique o template index.html: <html> <head> <title>Últimas Notícias</title> </head> <body> <h1>Veja as nossas últimas notícias:</h1> <ul> {% for noticia in noticias %} <li><a href="/noticias/noticia/{{noticia.id}}"> <b>{{noticia.categoria}}</b>: {{noticia.titulo}}</a></li> {% endfor %} </ul> </body> </html>
  • 49.
    Crie um templatepara os detalhes • Crie um arquivo (detalhe.html) na pasta templates/ noticias/detalhe.html: <html> <head> <title>{{noticia.titulo}}</title> </head> <body> <p>{{noticia.categoria}}: {{noticia.jornalista}}</p> <h1>{{noticia.titulo}}</h1> <h2>{{noticia.texto}}</h2> </body> </html>
  • 50.
    Criando a funçãopara exibir o detalhe • Modifique o seu arquivo meusite/noticias/views.py, adicione a seguinte função: def detalhe(request, noticia_id): noticia = get_object_or_404(Noticia, pk=noticia_id) return render_to_response('noticias/detalhe.html', {'noticia': noticia})
  • 51.
    Associando a URLà função criada • Modifique o arquivo meusite/noticias/urls.py: from django.conf.urls.defaults import * urlpatterns = patterns('meusite.noticias.views', (r'^$', 'index'), (r'^noticia/(?P<noticia_id>d+)/$', 'detalhe'), )
  • 52.
    Testando • Abra oseguinte endereço em seu navegador: • http://localhost:8000/noticias/
  • 53.
    Limitando o númerode notícias • Podemos limitar o número de notícias exibidas. Por exemplo, vamos modificar a função index do módulo views.py: from django.http import HttpResponse from django.shortcuts import render_to_response, get_object_or_404 from meusite.noticias.models import * def index(request): noticias = Noticia.objects.all().order_by('-data_publicacao')[:10] return render_to_response('noticias/index.html', {'noticias': noticias})
  • 54.
    Testando • Adicione pelomenos 11 notícias e teste a sua aplicação; • Experimente mudar os templates; • Abra o seguinte endereço em seu navegador: • http://localhost:8000/noticias/