Eigene Fehlerseiten anlegen

Wir hatten schon gesehen, dass es relativ einfach möglich ist, eigene Fehlerseiten für gewisse HTTP-Status-Codes auszugeben. Zum Beispiel wenn eine Resource nicht gefunden wurde, ist es üblich, eine 404-Fehlerseite auszugeben. Meist passiert das im Zusammenhang, wenn eine URL nicht gefunden wird oder ein angefragtes Objekt nicht exisitert, zum Beispiel über die Funktion get_objects_or_404. Manchmal will man aber das Verhalten noch mehr steuern und gezielt einen anderen Statuscode zurückgeben.

Diese Fehlerseiten werden angezeigt, wenn DEBUG=False ist, also wenn sich die Website im Live-Betrieb befindet. Die eigenen Fehlerseiten werden in event_manager/templates angelegt.

404 NOT FOUND

Wenn eine eigene 404.html-Datei angelegt wird, wird diese im Falle eines 404 Fehlers angezeigt.

500 Server Error

Wenn eine eigene 500.html-Datei angelegt wird, wird diese im Falle eines 500 Fehlers angezeigt.

403 Forbidden

Wenn eine eigene 403.html-Datei angelegt wird, wird diese im Falle eines 403 Fehlers angezeigt.

ref Bad Request

Wenn eine eigene ref.html-Datei angelegt wird, wird diese im Falle eines ref Fehlers angezeigt.

In der render-Funktion den Statuscode übergeben

Wir können der render-Funktion noch ein weiteres Keyword-Argument mitgeben: status definiert den HTTP-Status, den die Funktion zurückgibt. Damit können wir gezielt den Statuscode steuern und sogar wie gewohnt Daten mit im Kontext übergeben.

Das Template für die 404-Seite ist wie gewohnt unter event_manager/event_manager/templates zu finden. Um allerdings den Kontext mit auszugeben, müssen wir im Anschluss auch noch das Template verändern.

Unter event_manager/events/views.py legen wir folgende funktionsbasierte View an:

def send404(request):
    return render(
            request,
            "404.html",
            {"data": "some data"},
            status=404
            )

Jetzt passen wir das Template unter event_manager/event_manager/templates/404.html an. Wir wollen die Fehlerseite etwas verbessern und die MÖglichkeit bieten, den Fehler aus dem Kontext-Dictionary auszugeben.