直接从 django 中的 urls.py 重定向到命名的 url 模式?

在 Django 中,如何直接从 urls.py 执行简单的重定向?自然地,我是一个组织良好的家伙,赞成 DRY 原则,所以我想得到的目标基于它的名称的网址模式,而不是硬编码的网址。

79416 次浏览

如果你使用的是 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.forever’的默认值将从 True 更改为 False。设置一个显式值以禁止此警告。

如果您不能支持 RedirectView,那么旧版本的 django 支持这种方式

In view. py

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

在网上

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

您可以使用 HttpResponsePermanentRedirect使其永久化

这对我有用。

from django.views.generic import RedirectView


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

在上面的例子中,'/'意味着它将重定向到索引页, 您还可以在其中添加任何 URL 模式。

我试图将所有404重定向到主页,以下工作非常有效:

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

对于 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),
]

你可以直接在 urls.py 上做这样的事情:

url(r'^story/(?P<pk>\d+)/',
lambda request, pk: HttpResponsePermanentRedirect('/new_story/{pk}'.format(pk=pk)))

只要确保您有新的 URL 准备好接收重定向! ! 另外,请注意重定向的类型,在我使用的示例中,我使用的是 < strong > Forever Redirect