| 1 |
======================= |
|---|
| 2 |
L'application flatpages |
|---|
| 3 |
======================= |
|---|
| 4 |
|
|---|
| 5 |
Django est fourni avec une application optionnelle "flatpages". Elle vous |
|---|
| 6 |
permet de stocker du contenu HTML simple "à plat" en base de données et gère la |
|---|
| 7 |
partie gestion pour vous via l'interface d'administration de Django et une API Python. |
|---|
| 8 |
|
|---|
| 9 |
Une page à plat est un simple objet contenant une URL, un titre et du contenu. |
|---|
| 10 |
Utilisez les dans les cas un spéciaux et unique, comme les pages "A propos" ou |
|---|
| 11 |
"Politique de confidentialité", que vous voulez stocker en base de données mais |
|---|
| 12 |
pour lesquelles vous ne souhaitez par développer d'application Django particulière. |
|---|
| 13 |
|
|---|
| 14 |
Une page à plat peut utiliser un gabarit particulier ou celui fourni par le système |
|---|
| 15 |
par défaut. Elle peut être associée à un ou plusieurs sites. |
|---|
| 16 |
|
|---|
| 17 |
Voici quelques exemples de pages à plat sur des sites propulsés par Django : |
|---|
| 18 |
|
|---|
| 19 |
* http://www.chicagocrime.org/about/ |
|---|
| 20 |
* http://www.lawrence.com/about/contact/ |
|---|
| 21 |
|
|---|
| 22 |
Installation |
|---|
| 23 |
============ |
|---|
| 24 |
|
|---|
| 25 |
Pour installer l'application flatpages, suivez ces étapes : |
|---|
| 26 |
|
|---|
| 27 |
1. Installez le `framework de sites`_ en ajoutant ``'django.contrib.sites'`` |
|---|
| 28 |
à votre propriété INSTALLED_APPS_, si ce n'est pas déjà le cas. |
|---|
| 29 |
2. Ajoutez ``'django.contrib.flatpages'`` à votre propriété INSTALLED_APPS_. |
|---|
| 30 |
3. Ajoutez ``'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'`` |
|---|
| 31 |
à votre propriété MIDDLEWARE_CLASSES_. |
|---|
| 32 |
4. Lancez la commande ``manage.py syncdb``. |
|---|
| 33 |
|
|---|
| 34 |
.. _framework de sites: ../sites/ |
|---|
| 35 |
.. _INSTALLED_APPS: ../settings/#installed-apps |
|---|
| 36 |
.. _MIDDLEWARE_CLASSES: ../settings/#middleware-classes |
|---|
| 37 |
|
|---|
| 38 |
Comme ça marche |
|---|
| 39 |
=============== |
|---|
| 40 |
|
|---|
| 41 |
``manage.py syncdb`` crée deux tables dans votre base de données: ``django_flatpage`` |
|---|
| 42 |
et ``django_flatpage_sites``. ``django_flatpage`` est une simple table de consultation |
|---|
| 43 |
associant simplement une URL à un titre et un pan de texte. |
|---|
| 44 |
``django_flatpage_sites`` associe une page à plat à un site. |
|---|
| 45 |
|
|---|
| 46 |
Le ``FlatpageFallbackMiddleware`` effectue la totalité du travail. A chaque fois |
|---|
| 47 |
qu'une application Django lève une erreur 404, ce middleware vérifie en dernier ressort |
|---|
| 48 |
la base de données des pages à plats avec l'URL recherchée. Plus précisément, il recherche |
|---|
| 49 |
une page à plat avec l'URL donnée et un identifiant de site qui correspond à la propriété SITE_ID_. |
|---|
| 50 |
|
|---|
| 51 |
S'il trouve un résultat, il suit l'algorithme suivant : |
|---|
| 52 |
|
|---|
| 53 |
* Si la page à plat possède un gabarit spécifique, il charge ce gabarit. Sinon, |
|---|
| 54 |
il charge le gabarit ``flatpages/default.html``. |
|---|
| 55 |
* Il passe au gabarit une unique variable contextuelle, ``flatpage``, qui est |
|---|
| 56 |
l'objet flatpage. Il utilise RequestContext_ dans le rendu du gabarit. |
|---|
| 57 |
|
|---|
| 58 |
S'il ne trouve aucun résultat, la requête continue son traitement comme d'habitude. |
|---|
| 59 |
|
|---|
| 60 |
Le middleware est uniquement activé sur les 404s -- par sur les 500s ou les réponses ayant un |
|---|
| 61 |
autre code de statut. |
|---|
| 62 |
|
|---|
| 63 |
Notez que l'ordre des ``MIDDLEWARE_CLASSES`` est important. Généralement, vous pouvez |
|---|
| 64 |
placer le ``FlatpageFallbackMiddleware`` à la fin de la liste, puisqu'il n'est utilisé |
|---|
| 65 |
qu'en dernier ressort. |
|---|
| 66 |
|
|---|
| 67 |
Pour en savoir plus sur les middleware, lisez la `documentation des middleware`_. |
|---|
| 68 |
|
|---|
| 69 |
.. _SITE_ID: ../settings/#site-id |
|---|
| 70 |
.. _RequestContext: ../templates_python/#subclassing-context-djangocontext |
|---|
| 71 |
.. _documentation des middleware: ../middleware/ |
|---|
| 72 |
|
|---|
| 73 |
Comment ajouter, modifier et supprimer une page à plat |
|---|
| 74 |
====================================================== |
|---|
| 75 |
|
|---|
| 76 |
Via l'interface d'administration |
|---|
| 77 |
-------------------------------- |
|---|
| 78 |
|
|---|
| 79 |
Si vous avez activé l'interface d'administration automatique de Django, vous devriez |
|---|
| 80 |
voir une section "Flatpages" sur la page d'accueil de l'administration. Editez les |
|---|
| 81 |
pages à plat comme vous éditez un autre objet du système. |
|---|
| 82 |
|
|---|
| 83 |
Via l'API Python |
|---|
| 84 |
---------------- |
|---|
| 85 |
|
|---|
| 86 |
Les pages à plats sont définies par un `modèle Django`_ standard, qui se trouve dans |
|---|
| 87 |
`django/contrib/flatpages/models.py`_. Vous pouvez utiliser les objets flatpage via l' |
|---|
| 88 |
`API base de données de Django`_. |
|---|
| 89 |
|
|---|
| 90 |
.. _modèle Django: ../model-api/ |
|---|
| 91 |
.. _django/contrib/flatpages/models.py: http://code.djangoproject.com/browser/django/trunk/django/contrib/flatpages/models.py |
|---|
| 92 |
.. _API base de données de Django: ../db-api/ |
|---|
| 93 |
|
|---|
| 94 |
Les gabarits Flatpage |
|---|
| 95 |
===================== |
|---|
| 96 |
|
|---|
| 97 |
Par défaut, les pages à plat sont rendues via le gabarit ``flatpages/default.html``, |
|---|
| 98 |
mais vous pouvez modifier ce comportement pour une page à plat particulière. |
|---|
| 99 |
|
|---|
| 100 |
La création du gabarit ``flatpages/default.html`` est de votre responsabilité; |
|---|
| 101 |
dans votre répertoire de gabarits, créer simplement un répertoire ``flatpages`` |
|---|
| 102 |
contenant le fichier ``default.html``. |
|---|
| 103 |
|
|---|
| 104 |
Les gabarits Flatpage reçoivent une unique variable contextuelle ``flatpage``, qui est |
|---|
| 105 |
l'objet flatpage. |
|---|
| 106 |
|
|---|
| 107 |
Voici un exemple de gabarit ``flatpages/default.html``:: |
|---|
| 108 |
|
|---|
| 109 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" |
|---|
| 110 |
"http://www.w3.org/TR/REC-html40/loose.dtd"> |
|---|
| 111 |
<html> |
|---|
| 112 |
<head> |
|---|
| 113 |
<title>{{ flatpage.title }}</title> |
|---|
| 114 |
</head> |
|---|
| 115 |
<body> |
|---|
| 116 |
{{ flatpage.content }} |
|---|
| 117 |
</body> |
|---|
| 118 |
</html> |
|---|
| 119 |
|
|---|
| 120 |
Puisque vous saisissez déjà du HTML brut à partir de la page d'administration |
|---|
| 121 |
d'une flatpage, le ``flatpage.title`` et le ``flatpage.content`` sont tous deux |
|---|
| 122 |
marqués comme ne nécessitant *pas* d'`échappement HTML automatique`_ dans le |
|---|
| 123 |
gabarit. |
|---|
| 124 |
|
|---|
| 125 |
.. _échappement HTML automatique: ../templates/#automatic-html-escaping |
|---|
| 126 |
|
|---|