Djangoでは、urls.pyから単純なリダイレクトを直接行うにはどうすればよいですか?当然のことながら、私はよく組織された男で、DRY原則を支持しているので、URLをハードコーディングするのではなく、URLパターンという名前に基づいてターゲットを取得したいと思います。
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='/')),
...
上記の例の'/'
は、インデックスページにリダイレクトすることを意味します。このページでは、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),
]
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
を使用して永続化できます
私はすべての404をホームページにリダイレクトしようとしていましたが、以下がうまくいきました:
from Django.views.generic import RedirectView
...
under urlpatterns, added:
url(r'^.*/$', RedirectView.as_view(url='/home/')),
url(r'^$', RedirectView.as_view(url='/home/')),