2009-04-28 6 views
2

Anscheinend arbeitet Django flatseiten so, dass es die 404 behandelt, die von anderen Apps geworfen werden. Ich habe mich gefragt, ob ich eine andere App vom Typ Flatpage machen könnte, die einen Crack im 404 hat, bevor Flatpages dies tut. Ich habe das bisher ohne Erfolg versucht. Eine Vorlage wird gerendert, aber die Daten kommen nicht durch.Können Sie in Django mehr als eine App mit einem 404 verwalten?

Ist es überhaupt möglich?

Antwort

3

ich nach dem Django docs, können Sie Ihre eigene Sicht als ein angeben 404 oder 500 Handler:

handler404 = 'mysite.views.my_custom_404_view' 

So, Ihre Anwendung einen benutzerdefinierten Fehler definieren Ansicht Handling in views.py, dass können Sie Setup als Handler für 404 oder 500 Ansicht in Ihrem urls.py

Siehe "Customizing Error views" für weitere Informationen.

+0

das funktioniert nur, wenn ich den Handler404 in meine Haupt-urls.py legte. Was wäre, wenn ich mehrere Apps hätte und jede App ihren eigenen Handler 404 hätte. die Web-GUI-App eine nette HTML-Seite und die Rest-API eine JSON-Antwort? – Florian

1

Die integrierte flatpages-App funktioniert mit some middleware: Die Middleware hat eine Funktion namens 'process_response', die ausgehende Antworten auf den Statuscode 404 überprüft. Wenn die Antwort ein 404 ist und die URL mit einer Flatpage übereinstimmt, unterdrückt die Middleware 404 und gibt die wiedergegebene Flatpage zurück.

Sie können dasselbe mit Ihrer eigenen Middleware machen. Um sicherzustellen, dass Ihr Code vor dem Flatpages Code aufgerufen wird, sollen Sie Ihre Middleware kommt nach Flatpages in Ihrer MIDDLEWARE_CLASSES Einstellung:

# in settings.py 
MIDDLEWARE_CLASSES = (
    # ... 
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', 
    'myapp.middleware.MyMiddlewareClass', 
) 

Der Grund ist es nach ist, und auch nicht vor, ist, weil während der Antwortphase Django gilt Middleware in umgekehrter Reihenfolge.

+0

Danke für den Vorschlag. Das ist interessant an der Middleware-Reihenfolge. Ich habe versucht, den Auftrag umzukehren, aber das hat in meinem Fall keinen Unterschied gemacht. – rick

Verwandte Themen