2013-03-29 38 views

回答

152

如果你是在Django的1.4或1.5,你可以這樣做:

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)), 
    ... 

如果你是在Django的1.6或以上,你可以這樣做:

from django.views.generic import RedirectView 

urlpatterns = patterns('', 
    url(r'^some-page/$', RedirectView.as_view(pattern_name='my_named_pattern', permanent=False)), 
    ... 

在Django的1.9,默認值permanent已從True更改爲False。正因爲如此,如果你不指定permanent關鍵字參數,您可能會看到這樣的警告:

RemovedInDjango19Warning:「RedirectView.permanent」的默認值在Django 1.9從真會更改爲False。設置一個明確的值來消除此警告。

+17

剛一說明,請記住,RedirectView的具有永久=真爲默認值。 –

+3

https://docs.djangoproject.com/en/1.7/ref/class-based-views/base/#redirectview – Wtower

+5

你可以重定向一切!像這樣:''(r'^。*/$',RedirectView.as_view(url ='http://newurl.com')),''' – radtek

8

這樣在舊版本的Django的支持,如果你不能支持RedirectView的

在view.py

def url_redirect(request): 
    return HttpResponseRedirect("/new_url/") 

在url.py

url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"), 

可以使它通過使用HttpResponsePermanentRedirect

24

這適用於我。

from django.views.generic import RedirectView 

urlpatterns = patterns('', 
    url(r'^some-page/$', RedirectView.as_view(url='/')), 
    ... 

在上面的例子中'/'意味着它會重定向到索引頁, 在這裏你可以添加任何URL模式也。

+1

請注意,RedirectView在老版本的Django中默認爲'permanent = True',在Django版本> = 1.9時默認爲'permanent = False'。 – Flimm

5

我試圖重定向所有404到主頁及以下偉大的工作:

from django.views.generic import RedirectView 
... 
under urlpatterns, added: 
    url(r'^.*/$', RedirectView.as_view(url='/home/')), 
    url(r'^$', RedirectView.as_view(url='/home/')),