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

时间:2013-03-29 15:41:43

标签: django redirect

在Django中,如何直接从urls.py进行简单的重定向?当然我是一个组织良好的人,喜欢DRY原则,所以我想根据它的命名url模式得到目标,而不是硬编码网址。

6 个答案:

答案 0 :(得分:177)

如果你使用的是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:Django 1.9中“RedirectView.permanent”的默认值将从True变为False。设置一个显式值以使此警告静音。

答案 1 :(得分:26)

这适合我。

from django.views.generic import RedirectView

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

在上面的例子中'/'表示它将重定向到索引页面, 您还可以在其中添加任何网址模式。

答案 2 :(得分:9)

如果您不支持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

将其永久化

答案 3 :(得分:8)

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

答案 4 :(得分: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/')),

答案 5 :(得分:0)

您可以直接在urls.py上执行以下操作:

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

只需确保您已准备好新的URL即可接收重定向!! 另外,请注意重定向的种类,在本例中,我使用的是永久重定向