在 Django 中,如何直接从 urls.py 进行简单的重定向?当然,我是一个组织良好的人,喜欢 DRY 原则,所以我想根据它的命名 url 模式来获取目标,而不是对 url 进行硬编码。
RedirectView
。
如果您使用的是 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。设置一个明确的值来消除此警告。
这对我有用。
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^some-page/$', RedirectView.as_view(url='/')),
...
在上面的例子中
'/'
表示它将重定向到索引页面,
您也可以在其中添加任何网址模式。
对于 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),
]
我试图将所有 404 重定向到主页,以下方法效果很好:
from django.views.generic import RedirectView
# under urlpatterns, added:
url(r'^.*/$', RedirectView.as_view(url='/home/')),
url(r'^$', RedirectView.as_view(url='/home/')),
如果你不支持 RedirectView,旧版本的 django 也支持这种方式
在视图中.py
def url_redirect(request):
return HttpResponseRedirect("/new_url/")
在url.py中
url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"),
您可以使用
HttpResponsePermanentRedirect
使其永久化
你可以直接在 urls.py 上做类似的事情:
url(r'^story/(?P<pk>\d+)/',
lambda request, pk: HttpResponsePermanentRedirect('/new_story/{pk}'.format(pk=pk)))
只需确保您已准备好新 URL 即可接收重定向! 另外,请注意重定向的类型,在我使用的示例中永久重定向