Django-de

Django Dokumentation

Die Flatpages Anwendung

Diese Dokumentation gilt für Djangos Entwicklerversion, die zum Teil erhebliche Unterschiede zur letzten veröffentlichen Version aufweist.

Django enthält eine optionale “Flatpages” Anwendung. Sie ermöglicht dir, einfache, “flache” (engl. “flat”) HTML-Inhalte in der Datenbank zu speichern und wird mit Hilfe von Djangos Adminoberfläche und einer Python API verwaltet.

Eine Flatpage ist ein einfaches Objekt mit einer URL, Titel und Inhalt. Nutze sie für einzelne Spezialseiten, wie “Über”- oder “Impressum”-Seiten, die du zwar in der Datenbank speichern, aber für die du keine eigene Django-Anwendung entwickeln möchtest.

Eine Flatpage kann entweder ein eigenes Template oder das standardmäßige, systemweite Flatpage-Template benutzen. Jede Flatpage kann mit einer oder mehreren Sites verknüpft werden.

Hier sind zum Beispiel einige Flatpages von Django-basierten Webseiten:

Installation

Um die Flatpage Anwendung zu installieren, folge diesen Schritten:

  1. Installiere das Sites-Framework, indem du 'django.contrib.sites' zu deiner INSTALLED_APPS Einstellung hinzufügst, wenn nicht schon vorhanden.
  2. Füge 'django.contrib.flatpages' zu deiner INSTALLED_APPS Einstellung hinzu.
  3. Füge 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware' zu deiner MIDDLEWARE_CLASSES Einstellung hinzu.
  4. Führe den Befehl manage.py syncdb aus.

Wie’s funktioniert

manage.py syncdb erstellt zwei Tabellen in deiner Datenbank: django_flatpage und django_flatpage_sites. django_flatpage ist eine einfache Nachschlage-Tabelle, die eine URL auf einen Titel und einen Haufen Text verweisen läßt. django_flatpage_sites verknüpft eine Flatpage mit einer Site.

Die FlatpageFallbackMiddleware erledigt die ganze Arbeit: Jedesmal, wenn eine Django-Anwendung einen HTTP-Fehler mit dem Statuscode 404 erzeugt, prüft diese Middleware als letztes noch, ob die Flatpage-Tabelle die angefragte URL enthält. Genauer gesagt, wird auf eine Flatpage geprüft, die die gegebene URL und eine Site ID besitzt, die der SITE_ID Einstellung entspricht.

Wenn die Middleware eine Übereinstimmung findet, wird folgender Algorithmus verfolgt:

  • Wenn die Flatpage ein eigenes Template besitzt, wird dieses Template geladen. Ansonsten wird das Template flatpages/default.html genutzt.
  • Die Middleware übergibt dem Template eine einzige Kontextvariable, flatpage, die dem Flatpageobjekt entspricht. Dabei wird beim Rendern des Templates ein RequestContext genutzt.

Wenn es keine Übereinstimmung gibt, wird die Anfrage normal weiter verarbeitet.

Die Middleware wird nur durch einen HTTP-Fehler mit dem Statuscode 404 aktiviert — nicht durch 500er oder irgendeinen anderen Statuscode.

Beachte, dass die Reihenfolge von MIDDLEWARE_CLASSES eine Rolle spielt. Normalerweise kannst du FlatpageFallbackMiddleware an das Ende der Liste setzen, weil diese als letzer Ausweg genutzt wird.

Für weitere Informationen über Middleware, lies die Middleware Dokumentation.

Wie man Flatpages erstellt, ändert und löscht

Mit der Administrationsoberfläche

Wenn du die automatische Django-Administrationsoberfläche aktiviert hast, solltest du einen “Flatpages” Abschnitt auf der Übersichtsseite sehen. Ändere Flatpages, wie du jedes andere Objekt im System auch änderst.

Mit der Python API

Flatpages stellen ein übliches Django-Datenmodell dar, welches in django/contrib/flatpages/models.py zu finden ist. Du kannst Flatpage Objekte mit Hilfe der Django-Datenbank-API ansprechen.

Flatpage Templates

Standardmäßig werden Flatpages mit dem Template flatpages/default.html gerendert, was aber optional für jede Flatpage separat einstellbar ist.

Das Template flatpages/default.html zu erstellen, liegt in deiner Verantwortung. Erstelle dazu ein Verzeichnis flatpages in deinem Template-Verzeichnis, der eine Datei default.html enthält.

Flatpage-Templates bekommen nur die Kontextvariable flatpage übergeben, die dam Flatpageobjekt entspricht.

Hier ist ein Beispiel für ein flatpages/default.html Template:

<!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>

Da für Flatpages in der Administrationsoberfläche bereits HTML-Quelltext — sowohl für flatpage.title als auch für flatpage.content — eingegeben wird, sind diese Felder so markiert, dass sie im Template nicht automatisch durch den Escape-HTML Filter laufen.