djangoでHttpresponseRedirectのリダイレクト処理時に、遷移先の画面でgetのクエリーパラメーターを引き継いで渡したい時があります。
そんな時に使える方法を紹介します。
httpresponseredirect with parameters django
コンテンツ
環境
・django 2.2-
クエリーパラメーターとは
「そもそもクエリーパラメーターってなんなん?」って人のために簡単に説明します。
クエリーパラメーターは様々な情報をwebサーバーに伝えるためにURLに付加する情報になります。
例えば、このサイトのURLは次になります。
1 |
https://freeheroblog.com/ |
このサイトURLに対して、以下のように「?s=python」と付与して、https://freeheroblog.com/?s=python にアクセスするとサイト内から「s」がsearchの頭文字で、「s」という名前のパラメーターが「=」イコールで「python」を含む記事タイトル及び記事本文を検索して一覧表示します。
1 |
https://freeheroblog.com/?s=python |
つまりこの場合、?以下の「?s=python」がクエリーパラメーターになります。
ということで使い方は分かったかと思いますので以下で紹介していきます。
リダイレクト処理時にgetのクエリーパラメーターを渡す
必要な処理は3つあります。
1. views.pyの渡す側の処理
2. urls.pyの引き継ぎ処理
3.views.pyの受け取り側の処理
それではまずコードを書いてから説明をしていきます。
views.pyの渡す側の処理
views.py
1 2 3 4 5 6 7 8 9 10 11 12 |
from django.http import HttpResponseRedirect from django.urls import reverse def index(request): . . . get_params = '?' + request.GET.urlencode() return HttpResponseRedirect(reverse( 'sample:index', args=(get_params,)) ) |
- 1-2目で必要なモジュールを書いておきます
- 4行目のrequest.GET.urlencode()を使うことでgetのパラメーターを取得することができます。また「?」はありませんので、付与してあげます
- 6行目は、sampleというアプリのindexというviewへの遷移先を記述します
- 7行目のargsが今回の一番のキーポイントで、args(アーグス)へはtoupleで渡す必要があるので()のカッコで囲み、且つ閉じカッコ前にはコンマを記述します。
argsの使い方に関しては過去記事で紹介しています。
urls.pyの引き継ぎ処理
urls.py
1 2 3 4 |
from django.urls import path from . import views path('practice/<get_params>/', views.practice, name='practice'), |
ここでのキーポイントは<get_params>箇所になります。
ここの<get_params>という変数をあえて書くことで、クエリーパラメーターも引き継がせることができます。
views.pyの受け取り側の処理
views.py
1 2 |
def practice(request, get_params): |
受け取り側では、「views.pyの渡す側の処理」でargsでタプル変数を渡されたわけですから当然受け取り側も、受け皿を用意する必要があります。
urls.pyでviews.practiceというviewsへの遷移先を指定されたので、views関数の引数には通常のrequestと、get_paramsという変数を書いておきます。
get_paramsの中身を知りたいというときはprintでもいいので使用して確認して見てください。
get_paramsの受け取り後の処理のヒントに関しての記事も以下で紹介しています。
以上。
参考
https://docs.djangoproject.com/ja/2.2/intro/tutorial04/
最後に
いかがでしたでしょうか。
以上が、「【Django】HttpResponseRedirectのリダイレクト処理時にgetのクエリーパラメーターを渡す」の紹介記事になります。
是非django開発で使用して見てください。