【Django】リダイレクトする(パラメータ付きも)

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ステータスコードリダイレクトの種類
True301永続的なリダイレクト
False302一時的なリダイレクト

第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でリダイレクトする(パラメータ付きも)方法でした。

タイトルとURLをコピーしました