Jak mogę przekierować ruch, który nie pasuje do żadnego z moich innych adresów URL, z powrotem na stronę główną?
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'),
)
W obecnej postaci ostatni wpis wysyła cały „inny” ruch na stronę główną, ale chcę przekierować za pośrednictwem protokołu HTTP 301 lub 302 .
źródło
name
częśćDEBUG = True
lub przynajmniej ustawićADMINS
opcję - docs.djangoproject.com/en/dev/ref/settings/#std:setting-ADMINSW Django 1.8 tak zrobiłem swoje.
Zamiast używać
url
, możesz użyćpattern_name
, który jest nieco nie-SUCHY i zapewni zmianę adresu URL, nie musisz też zmieniać przekierowania.źródło
Jeśli utkniesz w django 1.2, tak jak ja, a RedirectView nie istnieje, innym sposobem dodania mapowania przekierowań jest użycie:
Możesz również zmienić trasę wszystkiego w meczu. Jest to przydatne, gdy zmieniasz folder aplikacji, ale chcesz zachować zakładki:
Jest to lepsze rozwiązanie niż django.shortcuts.redirect, jeśli tylko próbujesz zmodyfikować routing adresów URL i nie masz dostępu do .htaccess itp. (Korzystam z Appengine, a app.yaml nie zezwala na przekierowywanie adresów URL na tym poziomie .htaccess).
źródło
(r'^match_folder/(?P<path>.*)/$', RedirectView.as_view(url='/new_folder/%(path)s/', permanent=True), name='view-name'),
Innym sposobem na to jest użycie HttpResponsePermanentRedirect w następujący sposób:
In view.py
W pliku url.py
źródło
Inne metody działają dobrze, ale możesz też użyć starego, dobrego
django.shortcut.redirect
.Poniższy kod został zaczerpnięty z tej odpowiedzi .
W Django 2.x:
źródło