直接从django中的urls.pyredirect到指定的url模式?

在Django中,我怎样才能直接从urls.py做一个简单的redirect? 当然,我是一个组织良好的家伙,偏爱DRY原则,所以我想根据它的名称来获取目标url模式,而不是对url进行硬编码。

如果你在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关键字参数,则可能会看到以下警告:

RemovedInDjango19警告:在'Django 1.9'中,'RedirectView.permanent'的默认值将从True改为False。 设置一个明确的值来消除这个警告。

这对我有用。

 from django.views.generic import RedirectView urlpatterns = patterns('', url(r'^some-page/$', RedirectView.as_view(url='/')), ... 

在上面的例子中, '/'意味着它将redirect到索引页面,在那里你可以添加任何url模式。

如果您不支持RedirectView,则在旧版本的django中支持这种方式

在view.py中

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

在url.py中

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

您可以通过使用HttpResponsePermanentRedirect永久

我试图将所有404redirect到主页,下面的工作很好:

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