直接从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/')),