Wie kann ich Datenverkehr, der keiner meiner anderen URLs entspricht, zurück zur Startseite umleiten?
urls.py:
urlpatterns = patterns('',
url(r'^$', 'macmonster.views.home'),
#url(r'^macmon_home$', 'macmonster.views.home'),
url(r'^macmon_output/$', 'macmonster.views.output'),
url(r'^macmon_about/$', 'macmonster.views.about'),
url(r'^.*$', 'macmonster.views.home'),
)
So wie es aussieht, sendet der letzte Eintrag den gesamten "anderen" Verkehr an die Homepage, aber ich möchte entweder über HTTP 301 oder 302 umleiten .
quelle
name
Teil jedoch weglassenDEBUG = True
oder zumindest die eingestellteADMINS
Option - docs.djangoproject.com/en/dev/ref/settings/#std:setting-ADMINSIn Django 1.8 habe ich meine so gemacht.
Anstatt zu verwenden
url
, können Sie die verwendenpattern_name
, die etwas ungetrocknet ist und sicherstellt, dass Sie Ihre URL ändern. Sie müssen auch die Umleitung nicht ändern.quelle
Wenn Sie wie ich auf Django 1.2 stecken bleiben und RedirectView nicht existiert, verwenden Sie eine andere routenzentrierte Methode zum Hinzufügen des Redirect-Mappings:
Sie können auch alles in einem Match umleiten. Dies ist nützlich, wenn Sie den Ordner einer App ändern, aber Lesezeichen beibehalten möchten:
Dies ist django.shortcuts.redirect vorzuziehen, wenn Sie nur versuchen, Ihr URL-Routing zu ändern und keinen Zugriff auf .htaccess usw. haben (ich bin auf Appengine und app.yaml erlaubt keine URL-Umleitung auf dieser Ebene wie eine .htaccess).
quelle
(r'^match_folder/(?P<path>.*)/$', RedirectView.as_view(url='/new_folder/%(path)s/', permanent=True), name='view-name'),
Eine andere Möglichkeit ist die Verwendung von HttpResponsePermanentRedirect wie folgt:
In view.py
In der url.py
quelle
Die anderen Methoden funktionieren gut, aber Sie können auch die guten alten verwenden
django.shortcut.redirect
.Der folgende Code wurde dieser Antwort entnommen .
In Django 2.x:
quelle