web-dev-qa-db-ja.com

djangoのurls.pyから名前付きURLパターンに直接リダイレクトしますか?

Djangoでは、urls.pyから単純なリダイレクトを直接行うにはどうすればよいですか?当然のことながら、私はよく組織された男で、DRY原則を支持しているので、URLをハードコーディングするのではなく、URLパターンという名前に基づいてターゲットを取得したいと思います。

116
thnee

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に変更されます。この警告を消すために明示的な値を設定します。

179
thnee

これは私のために動作します。

from Django.views.generic import RedirectView

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

上記の例の'/'は、インデックスページにリダイレクトすることを意味します。このページでは、URLパターンも追加できます。

28
Jay Modi

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),
]
9
Glushiator

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を使用して永続化できます

9
sirFunkenstine

私はすべての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
Anurag