Odpowiedzi:
Jeśli korzystasz z Django 1.4 lub 1.5, możesz to zrobić:
from django.core.urlresolvers import reverse_lazy
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^some-page/$', RedirectView.as_view(url=reverse_lazy('my_named_pattern'), permanent=False)),
...
Jeśli korzystasz z Django 1.6 lub nowszego, możesz to zrobić:
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^some-page/$', RedirectView.as_view(pattern_name='my_named_pattern', permanent=False)),
...
W Django 1.9 domyślna wartość permanent
zmieniła się z True na False. Z tego powodu, jeśli nie określisz permanent
argumentu słowa kluczowego, możesz zobaczyć następujące ostrzeżenie:
RemovedInDjango19Warning: Domyślna wartość „RedirectView.permanent” zmieni się z True na False w Django 1.9. Ustaw jawną wartość, aby wyciszyć to ostrzeżenie.
(r'^.*/$', RedirectView.as_view(url='http://newurl.com')),
pattern_name
argumentu do RedirectView
wykonania odwrotnego za Ciebie w czasie wywołania przy użyciu podanej nazwy wzorca. Inne przydatne parametry obejmują permanent
iquery_string
.
To działa dla mnie.
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^some-page/$', RedirectView.as_view(url='/')),
...
W powyższym przykładzie '/'
oznacza, że przekieruje do strony indeksowej, na której możesz również dodać dowolne wzorce adresów URL.
RedirectView
ma permanent=True
domyślnie w starszych wersji Django, a permanent=False
jako domyślny w Django wersji> = 1.9.
dla django v2 +
from django.contrib import admin
from django.shortcuts import redirect
from django.urls import path, include
urlpatterns = [
# this example uses named URL 'hola-home' from app named hola
# for more redirect's usage options: https://docs.djangoproject.com/en/2.1/topics/http/shortcuts/
path('', lambda request: redirect('hola/', permanent=False)),
path('hola/', include("hola.urls")),
path('admin/', admin.site.urls),
]
permanent=False
jest to ustawienie domyślne. Aby uzyskać więcej informacji, przeczytaj: docs.djangoproject.com/en/2.1/topics/http/shortcuts/#redirect developer.mozilla.org/en-US/docs/Web/HTTP/ ...
Ten sposób jest obsługiwany w starszych wersjach django, jeśli nie możesz obsługiwać RedirectView
In view.py
def url_redirect(request):
return HttpResponseRedirect("/new_url/")
W pliku url.py
url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"),
Możesz to uczynić na stałe, używając HttpResponsePermanentRedirect