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

thn*_*nee 120 django redirect

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

thn*_*nee 182

如果您使用的是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)),
    ...
Run Code Online (Sandbox Code Playgroud)

如果您使用的是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)),
    ...
Run Code Online (Sandbox Code Playgroud)

在Django 1.9中,默认值permanent已从True更改为False.因此,如果您未指定permanent关键字参数,则可能会看到以下警告:

RemovedInDjango19Warning:在Django 1.9中,'RedirectView.permanent'的默认值将从True变为False.设置显式值以使此警告静音.

  • 请注意,请记住RedirectView默认为permanent = True. (18认同)
  • 你可以重定向一切!像这样:```(r'^.*/$',RedirectView.as_view(url ='http://newurl.com')),``` (8认同)
  • 有人可以在上面的例子中解释什么是'my_named_pa​​ttern'. (5认同)
  • https://docs.djangoproject.com/en/1.7/ref/class-based-views/base/#redirectview (3认同)
  • 在Django 1.9中,RedirectView将具有permanent = False作为默认值. (3认同)

Jay*_*odi 28

这适合我.

from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^some-page/$', RedirectView.as_view(url='/')),
    ...
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,请记住`RedirectView`在旧版本的Django中默认为`permanent = True`,在Django版本中默认为`permanent = False>> = 1.9. (5认同)

Glu*_*tor 12

对于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),
]
Run Code Online (Sandbox Code Playgroud)

  • @Ali 永久重定向通常具有HTTP代码301,临时重定向通常具有代码302。永久重定向用于通知浏览器网站的结构变化。临时重定向用于指示在动态服务器端操作(例如登录)后显示的新页面。根据文档,“permanent=False”是默认值。有关更多详细信息,请阅读: https://docs.djangoproject.com/en/2.1/topics/http/shortcuts/#redirect https://developer.mozilla.org/en-US/docs/Web/HTTP/Redirections#永久重定向 (6认同)

sir*_*ine 9

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

在view.py中

def url_redirect(request):
    return HttpResponseRedirect("/new_url/")
Run Code Online (Sandbox Code Playgroud)

在url.py中

url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"),
Run Code Online (Sandbox Code Playgroud)

你可以使用它永久化 HttpResponsePermanentRedirect


小智 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/')),
Run Code Online (Sandbox Code Playgroud)