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.

Novo no Django 1.0: Please, see the release notes

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:

Instalação

Para instalar a aplicação flatpages, siga os passos abaixo:

  1. Instale o framework sites adicionando 'django.contrib.sites' em seu INSTALLED_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 be 1 (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.

  2. Adicione 'django.contrib.flatpages' em seu INSTALLED_APPS.

  3. Adicione 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware' em seu MIDDLEWARE_CLASSES.

  4. 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 classe RequestContext 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 :doc’:documentação do middleware </topics/http/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.