L'application flatpages
Django est fourni avec une application optionnelle "flatpages". Elle vous permet de stocker du contenu HTML simple "à plat" en base de données et gère la partie gestion pour vous via l'interface d'administration de Django et une API Python.
Une page à plat est un simple objet contenant une URL, un titre et du contenu. Utilisez les dans les cas un spéciaux et unique, comme les pages "A propos" ou "Politique de confidentialité", que vous voulez stocker en base de données mais pour lesquelles vous ne souhaitez par développer d'application Django particulière.
Une page à plat peut utiliser un gabarit particulier ou celui fourni par le système par défaut. Elle peut être associée à un ou plusieurs sites.
Voici quelques exemples de pages à plat sur des sites propulsés par Django :
Installation
Pour installer l'application flatpages, suivez ces étapes :
- Installez le framework de sites en ajoutant 'django.contrib.sites' à votre propriété INSTALLED_APPS, si ce n'est pas déjà le cas.
- Ajoutez 'django.contrib.flatpages' à votre propriété INSTALLED_APPS.
- Ajoutez 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware' à votre propriété MIDDLEWARE_CLASSES.
- Lancez la commande manage.py syncdb.
Comme ça marche
manage.py syncdb crée deux tables dans votre base de données: django_flatpage et django_flatpage_sites. django_flatpage est une simple table de consultation associant simplement une URL à un titre et un pan de texte. django_flatpage_sites associe une page à plat à un site.
Le FlatpageFallbackMiddleware effectue la totalité du travail. A chaque fois qu'une application Django lève une erreur 404, ce middleware vérifie en dernier ressort la base de données des pages à plats avec l'URL recherchée. Plus précisément, il recherche une page à plat avec l'URL donnée et un identifiant de site qui correspond à la propriété SITE_ID.
S'il trouve un résultat, il suit l'algorithme suivant :
- Si la page à plat possède un gabarit spécifique, il charge ce gabarit. Sinon, il charge le gabarit flatpages/default.html.
- Il passe au gabarit une unique variable contextuelle, flatpage, qui est l'objet flatpage. Il utilise RequestContext dans le rendu du gabarit.
S'il ne trouve aucun résultat, la requête continue son traitement comme d'habitude.
Le middleware est uniquement activé sur les 404s -- par sur les 500s ou les réponses ayant un autre code de statut.
Notez que l'ordre des MIDDLEWARE_CLASSES est important. Généralement, vous pouvez placer le FlatpageFallbackMiddleware à la fin de la liste, puisqu'il n'est utilisé qu'en dernier ressort.
Pour en savoir plus sur les middleware, lisez la documentation des middleware.
Comment ajouter, modifier et supprimer une page à plat
Via l'interface d'administration
Si vous avez activé l'interface d'administration automatique de Django, vous devriez voir une section "Flatpages" sur la page d'accueil de l'administration. Editez les pages à plat comme vous éditez un autre objet du système.
Via l'API Python
Les pages à plats sont définies par un modèle Django standard, qui se trouve dans django/contrib/flatpages/models.py. Vous pouvez utiliser les objets flatpage via l' API base de données de Django.
Les gabarits Flatpage
Par défaut, les pages à plat sont rendues via le gabarit flatpages/default.html, mais vous pouvez modifier ce comportement pour une page à plat particulière.
La création du gabarit flatpages/default.html est de votre responsabilité; dans votre répertoire de gabarits, créer simplement un répertoire flatpages contenant le fichier default.html.
Les gabarits Flatpage reçoivent une unique variable contextuelle flatpage, qui est l'objet flatpage.
Voici un exemple de gabarit 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>
Puisque vous saisissez déjà du HTML brut à partir de la page d'administration d'une flatpage, le flatpage.title et le flatpage.content sont tous deux marqués comme ne nécessitant pas d'échappement HTML automatique dans le gabarit.