Djangoで、
- ログイン画面にリダイレクトしたい
- ログイン後にトップページにリダイレクトしたい
- エラーページにリダイレクトしたい など
リダイレクトしたいことがあります。
この記事では「Djangoでリダイレクトする(パラメータ付きも)方法」を説明します。参考になりましたら幸いです。
Djangoでリダイレクトする(パラメータ付きも)方法
Djangoでリダイレクトするにはredirect関数を使います。
redirect関数の詳細
https://docs.djangoproject.com/ja/3.2/topics/http/shortcuts/#django.shortcuts.redirect
redirect関数は以下の引数を取り、戻り値にHttpResponseRedirect型のインスタンスを返します。
第1引数:to
リダイレクト先を指定します。指定方法には以下4通りあります。
- モデルのオブジェクト
- View名
- 絶対URL
- 相対URL
第2引数:*args
リダイレクト先に渡す位置引数(パラメータ)を指定します。
なお、第1引数にView名を指定した時にだけ有効で、かつ第4引数の名前付き引数とは同時には指定はできません。
第3引数:permanent
一時的リダイレクトか永続的リダイレクトかを指定します。(デフォルトは一時的なリダイレクト)
引数 | HTTPステータスコード | リダイレクトの種類 |
True | 301 | 永続的なリダイレクト |
False | 302 | 一時的なリダイレクト |
第4引数:**kwargs
リダイレクト先に渡す名前付き引数(パラメータ)を指定します。
なお、第1引数にView名を指定した時にだけ有効で、第2引数の位置引数とは同時には指定はできません。
戻り値
戻り値にはDjangoでリダイレクトできるHttpResponseRedirectクラスのインスタンスを返します。
このインスタンスをリターンすることにより第1引数で指定したURLにリダイレクトします。
ので、redirect関数を呼び出しただけではリダイレクトしませんので、忘れずにリターンするようにしましょう!
redirect関数の使い方
redirect関数の具体的な使い方を何パターンか紹介します。
View名でリダイレクトする
redirect関数の第1引数にView名を指定することで、そのView名のViewにリダイレクトすることができます。この場合、home_viewにリダイレクトします。
urlpatternsの設定
from django.urls import path
urlpatterns = [
path('home/', home_view, name='home_redirect'),
]
リダイレクト関数の呼び出し
from django.shortcuts import redirect
return redirect('home_redirect')
位置引数・名前付き引数を付与してリダイレクトする
このようにリダイレクト時に位置引数・名前付き引数のどちらのパラメータでも付与することもできます。ただし、同時には付与できません。
urlpatternsの設定
from django.urls import path
urlpatterns = [
path('home/<int:pk>', home_view, name='home_redirect'),
]
from django.shortcuts import redirect
位置引数を付与してリダイレクト関数の呼び出し
return redirect('home_redirect', 123)
名前付き引数を付与してリダイレクト関数の呼び出し
return redirect('home_redirect', pk=123)
GETパラメータを付与してリダイレクト関数の呼び出し
GETパラメータはこのように付与します。
urlpatternsの設定
from django.urls import path
urlpatterns = [
path('home/', home_view, name='home_redirect'),
]
リダイレクト関数の呼び出し
from django.urls import reverse
from urllib.parse import urlencode
from django.shortcuts import redirect
url = reverse('home_redirect')
parameters = urlencode({pk:123})
return redirect(f'{url}?{parameters}')
まとめ
Djangoでリダイレクトするにはredirect関数を使います!
以上がDjangoでリダイレクトする(パラメータ付きも)方法でした。