Django、リダイレクト時にGETパラメータも渡す

Twitterでシェア FaceBookでシェア はてなブックマークでシェア

Python - Django
2018年11月22日21:15に更新(約21日前)
2018年11月10日2:15に作成(約33日前)

旧ブログ移行記事です。

概要

Djangoでリダイレクト処理を行うことはよくありますが、GETパラメーターを引き継いでリダイレクトさせたいという場合があります。

一般的なリダイレクト

リダイレクトをさせるには、一般的に以下のようにします。

return redirect('post:detail', pk=1)

# 以下のようなコードでも可能
# url = resolve_url('post:detail', pk=1)
# return HttpResponseRedirect(url)

GETパラメーターを引き継いだリダイレクト

GETパラメーターも一緒にリダイレクトさせるには、以下のようにします。

response = redirect('post_list')
get_params = request.GET.urlencode()
response['location'] += '?'+get_params
return response

まず、この段階でレスポンスオブジェクトを取得できます。

response = redirect('post_list')

ビューではHttpResponse、又はその派生オブジェクトを返す(returnする)必要がありますが、今回のようにレスポンスオブジェクトに手を入れてから返却することもよくやります。redirectだけでなく、renderといった関数も当然HttpResponseオブジェクトを返します。

request.GET.urlencode()で、GETパラメーターの文字列を取得できます。

get_params = request.GET.urlencode()
# 例えば a=1&b=2 のように取得できる

上で取得したGETパラメータの文字列を、レスポンスオブジェクトのlocation...これはリダイレクト先のURLを表しているのですが、それに付け加えます。

response['location'] += '?'+get_params
Twitterでシェア FaceBookでシェア はてなブックマークでシェア

記事にコメントする