| 1 |
=========================== |
|---|
| 2 |
Die Applikation "flatpages" |
|---|
| 3 |
=========================== |
|---|
| 4 |
|
|---|
| 5 |
Django wird mit einer optional einsetzbaren Applikation namens "flatpages" ausgeliefert. Sie ermöglicht, einfachen HTML-Content in einer Datenbank abzulegen. Die Verwaltung ist sowohl über Djangos Administrations-Interface, als auch über die Python API realisiert. |
|---|
| 6 |
|
|---|
| 7 |
Bei einer Flatpage handelt es sich um ein einfaches Objekt, bestehend aus einer URL, einem Titel und dem Inhalt. Sie kann für beliebige Seiten verwendet werden. Gute Beispiele sind das Impressum oder die rechtlichen Hinweise einer Webseite, die zwar in der Datenbank abgelegt werden sollen, aber für die keine eigene Django-Applikation entwickelt werden soll. |
|---|
| 8 |
|
|---|
| 9 |
Eine Flatpage kann ein angepasstes oder ein systemweites Standard-Template verwenden. Sie kann mit einer beliebigen Anzahl von Seiten verknüpft werden. |
|---|
| 10 |
|
|---|
| 11 |
Hier einige Beispiele für Webseiten, die Django einsetzen und Flatpages verwenden: |
|---|
| 12 |
|
|---|
| 13 |
* http://www.chicagocrime.org/about/ |
|---|
| 14 |
* http://www.lawrence.com/about/contact/ |
|---|
| 15 |
|
|---|
| 16 |
Installation |
|---|
| 17 |
============ |
|---|
| 18 |
|
|---|
| 19 |
Um die Applikation Flatpages zu installieren, sind folgende Schritte notwendig: |
|---|
| 20 |
|
|---|
| 21 |
1. ``'django.contrib.flatpages'`` zur Einstellung INSTALLED_APPS_ hinzufügen. |
|---|
| 22 |
2. ``'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'`` zur Einstellung MIDDLEWARE_CLASSES_ hinzufügen. |
|---|
| 23 |
3. Den Befehl ``manage.py syncdb`` ausführen. |
|---|
| 24 |
|
|---|
| 25 |
.. _INSTALLED_APPS: http://www.djangoproject.com/documentation/settings/#installed-apps |
|---|
| 26 |
.. _MIDDLEWARE_CLASSES: http://www.djangoproject.com/documentation/settings/#middleware-classes |
|---|
| 27 |
|
|---|
| 28 |
Was steckt dahinter |
|---|
| 29 |
=================== |
|---|
| 30 |
|
|---|
| 31 |
``manage.py syncdb`` legt zwei Tabellen in der Datenbank an: ``django_flatpage`` und ``django_flatpage_sites``. |
|---|
| 32 |
Bei ``django_flatpage`` handelt es sich um eine einfache Zuordnungstabelle, die eine URL mit einem Titel und einigem textuellen Inhalt verbindet. ``django_flatpage_sites`` hingegen verbindet eine Flatpage mit einer Seite. |
|---|
| 33 |
|
|---|
| 34 |
Die eigentliche Hauptarbeit verrichtet die ``FlatpageFallbackMiddleware``. Jedes mal wenn eine Django-Applikation einen 404-Fehler produziert, überprüft die Middleware die Flatpage-Datenbank auf eine registrierte URL hin. Im Einzelnen wird dabei überprüft, ob eine Flatpage mit der angegebenen URL und Seiten-ID existiert, die mit der SITE_ID_ Einstellung übereinstimmt. |
|---|
| 35 |
|
|---|
| 36 |
Wurde eine Übereinstimmung gefunden, wird wie folgt vorgegangen: |
|---|
| 37 |
|
|---|
| 38 |
* Falls die Flatpage ein angepasstes Template besitzt, wird dieses geladen. Sonst wird das Template ``flatpages/default`` geladen. |
|---|
| 39 |
* Dem Template wird die Kontext-Variable ``flatpage`` übergeben, welche das Flatpage-Objekt darstellt. Das Rendern des Templates übernimmt ein RequestContext_. |
|---|
| 40 |
|
|---|
| 41 |
Wird keine Übereinstimmung gefunden, wird die Verarbeitung der Anfrage ganz normal weitergeführt. |
|---|
| 42 |
|
|---|
| 43 |
Die Middleware wird nur im Falle eines 404 aktiviert, nicht aber bei einem 500 oder einem anderen Statuscodes. |
|---|
| 44 |
|
|---|
| 45 |
Zu beachten ist, dass die Reihenfolge der ``MIDDLEWARE_CLASSES`` eine Rolle spielt. Dabei kann die ``FlatpageFallbackMiddleware`` an das Ende der Liste möglicher Einträge gesetzt werden, da sie grundsätzlich als letztes verwendet wird. |
|---|
| 46 |
|
|---|
| 47 |
Mehr Informationen über Middleware finden sich in den `middleware docs`_. |
|---|
| 48 |
|
|---|
| 49 |
.. _SITE_ID: http://www.djangoproject.com/documentation/settings/#site-id |
|---|
| 50 |
.. _RequestContext: http://www.djangoproject.com/documentation/templates_python/#subclassing-context-djangocontext |
|---|
| 51 |
.. _middleware docs: http://www.djangoproject.com/documentation/middleware/ |
|---|
| 52 |
|
|---|
| 53 |
Hinzufügen, ändern und löschen von Flatpages |
|---|
| 54 |
============================================ |
|---|
| 55 |
|
|---|
| 56 |
Mit Hilfe des Admin-Interfaces |
|---|
| 57 |
------------------------------ |
|---|
| 58 |
|
|---|
| 59 |
Falls Djangos automatisches Admin-Interface aktiviert ist, sollte auf der Index-Seite ein Abschnitt "Flatpages" auftauchen. Die Flatpages lassen sich wie jedes andere Objekt im System editieren. |
|---|
| 60 |
|
|---|
| 61 |
Mit Hilfe der Python API |
|---|
| 62 |
------------------------ |
|---|
| 63 |
|
|---|
| 64 |
Flatpages werden durch ein Standard-`Django model`_ repräsentiert, welches unter `django/contrib/flatpages/models.py`_ zu finden ist. Auf Flatpage-Objekte kann mit Hilfe der `Django database API`_ zugegriffen werden. |
|---|
| 65 |
|
|---|
| 66 |
.. _Django model: http://www.djangoproject.com/documentation/model_api/ |
|---|
| 67 |
.. _django/contrib/flatpages/models.py: http://code.djangoproject.com/browser/django/trunk/django/contrib/flatpages/models.py |
|---|
| 68 |
.. _Django database API: http://www.djangoproject.com/documentation/db_api/ |
|---|
| 69 |
|
|---|
| 70 |
Flatpage Templates |
|---|
| 71 |
================== |
|---|
| 72 |
|
|---|
| 73 |
Standardmäßig werden Flatpages mit dem Template ``flatpages/default.html`` gerendert, welches sich aber auch für spezielle Flatpages überschreiben lässt. |
|---|
| 74 |
|
|---|
| 75 |
Die Datei ``flatpages/default.html`` muss von Hand erzeugt werden. Innerhalb des Template-Verzeichnisses ist dazu lediglich ein Verzeichnis ``flatpages`` anzulegen, das die Datei ``default.html`` enthält. |
|---|
| 76 |
|
|---|
| 77 |
Den Flatpage-Templates wird die Kontext-Variable ``flatpage`` übergeben, welche ein Flatpage-Objekt darstellt. |
|---|
| 78 |
|
|---|
| 79 |
Im Folgenden ein Beispiel-Template für ``flatpages/default.html``:: |
|---|
| 80 |
|
|---|
| 81 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" |
|---|
| 82 |
"http://www.w3.org/TR/REC-html40/loose.dtd"> |
|---|
| 83 |
<html> |
|---|
| 84 |
<head> |
|---|
| 85 |
<title>{{ flatpage.title }}</title> |
|---|
| 86 |
</head> |
|---|
| 87 |
<body> |
|---|
| 88 |
{{ flatpage.content }} |
|---|
| 89 |
</body> |
|---|
| 90 |
</html> |
|---|