A aplicação Flatpages¶
Django traz embutido uma aplicação opcional “flatpages”. Ela permite você armazenar conteúdo HTML em um banco de dados e toma conta do gerenciamento para você por meio administração do Django e uma API do Python.
Uma flatpage é um simples objeto com uma URL, título e conteúdo. Utilize-a para páginas únicas, customizadas, como “Quem somos” ou “Política de Privacidade”, que você quer armazenar no banco de dados, porém não quer desenvolver uma aplicação Django exclusiva para isso.
Uma flatpage pode tanto utilizar um template customizado como também um template padrão para todas as flatpages do sistema. Pode estar associada com um ou vários sites.
O campo conteúdo pode opcionalmente ser deixado em branco caso você prefira colocá-lo em um template customizado.
Alguns exemplos de flatpages em sites desenvolvidos com Django:
- http://www.chicagocrime.org/about/
- http://www.everyblock.com/about/
- http://www.lawrence.com/about/contact/
Instalação¶
Para instalar a aplicação flatpages, siga os passos abaixo:
Instale o
framework sites
adicionando'django.contrib.sites'
em seuINSTALLED_APPS
, se ele ainda não estiver lá.Also make sure you’ve correctly set
SITE_ID
to the ID of the site the settings file represents. This will usually be1
(i.e.SITE_ID = 1
, but if you’re not using the sites framework to manage multiple sites, it could be the ID of a different site.Adicione
'django.contrib.flatpages'
em seuINSTALLED_APPS
.Adicione
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'
em seuMIDDLEWARE_CLASSES
.Execute o comando
manage.py syncdb
.
Como funciona¶
manage.py syncdb
cria duas tabelas em seu banco de dados:
django_flatpage
e django_flatpage_sites
. django_flatpage
é uma
tabela comum que simplesmente mapeia a URL para um título e um punhado de
texto. django_flatpage_sites
associa uma flatpage a um site.
O FlatpageFallbackMiddleware
faz
todo o trabalho. Toda vez que qualquer aplicação Django chamar um erro 404, este
middleware verifica se existe alguma flatpage no banco de dados mapeada para a
URL requisitada como um último recurso. Mais especificamente, ele procura por
uma flatpage com a URL requisitada e o ID do site que corresponda com a variável
SITE_ID
no arquivo settings.py.
Se encontrar uma combinação, ele segue o seguinte algorítmo:
- Se a flatpage tiver um template customizado, ele carrega esse template.
Caso contrário carrega o template
flatpages/default.html
. - Ele passa ao template uma única variável de contexto,
flatpage
, que é um objeto do tipo flatpage. Ele utiliza a classeRequestContext
na renderização do template.
Se não encontrar uma combinação, a requisição continua a ser processada normalmente.
O middleware só é ativado para erros 404 – não para erros 500 ou respostas de qualquer outro código de status.
Note que a ordem de MIDDLEWARE_CLASSES
importa. Geralmente você pode
incluir a classe
FlatpageFallbackMiddleware
no fim
da lista, pois ele é um último recurso.
Para saber mais sobre middleware, leia a documentação do middleware.
Tenha certeza de que seu template de erro 404 está funcionando.
Note que a classe
FlatpageFallbackMiddleware
só é chamado caso uma view tenha sucesso ao produzir um erro 404. Se outra
view ou classe middleware tentar produzir um erro 404, porém não conseguir
e terminar lançando uma exceção (como por exemplo TemplateDoesNotExist
,
caso seu site não possua um template apropriado para respostas HTTP 404), a
resposta se tornará um erro HTTP 500 (“Erro Interno de Servidor”) e o
FlatpageFallbackMiddleware
não tentará servir uma flatpage.
Como adicionar, alterar e excluir flatpages¶
Pela interface de administração¶
Se você ativou a administração automática do Django, você deverá ver uma seção “Flatpages” na página inicial da administração. Altere as flatpages como você alteraria qualquer outro objeto no sistema.
Usando a API do Python¶
-
class
models.
FlatPage
¶ Flatpages são representadas por um modelo Django, que fica armazenado em django/contrib/flatpages/models.py. Você pode acessar objetos do tipo flatpage pela API de banco de dados do Django.
Templates das Flatpages¶
Por padrão, flatpages são renderizadas pelo template
flatpages/default.html
, mas você pode sobrescrevê-lo por uma flatpage
particular.
Criar o template flatpages/default.html
é sua responsabilidade; em seu
diretório de templates, crie uma pasta chamada flatpages
contendo um
arquivo chamado default.html
.
Para os templates das flatpages é passado apenas uma variável de contexto,
flatpage
, que é o objeto flatpage.
Segue abaixo um exemplo de template para flatpages/default.html
:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>{{ flatpage.title }}</title>
</head>
<body>
{{ flatpage.content }}
</body>
</html>
Uma vez que você já está inserindo código HTML puro na administração para uma
flatpage, tanto flatpage.title
como flatpage.content
não necessitam
de escaping automático de HTML no template.