• Skip to main content
  • Skip to secondary menu
  • Skip to primary sidebar
  • Skip to footer

AI活用エンジニアへの道

生成AI時代のエンジニアの生き方を考えるメディア(作成途中)

  • コラム
  • 生成AI
  • プログラミング
    • Python入門
    • Flask入門
    • Django入門
  • プロフィール
Home / プログラミング / Django / Djangoでリダイレクトをする方法についてまとめました(redirect, HttpResponseRedirect, reverse)

Djangoでリダイレクトをする方法についてまとめました(redirect, HttpResponseRedirect, reverse)

1 redirect関数(django.shortcuts.redirect)を用いたリダイレクト
2 HttpResopseRedirectを利用したリダイレクト方法
3 リダイレクトでパラメータを渡す
4 関連記事

[rtoc_mokuji title="" title_display="" heading="h3" list_h2_type="" list_h3_type="" display="" frame_design="" animation=""]


redirect関数(django.shortcuts.redirect)を用いたリダイレクト

django.shortcuts.redirectを用いて、リダイレクトをすることができる。
以下のように記述する。

def redirect_view(request):
    response = redirect('/redirect_success/') # https://自身のサイトのホスト/redirect_success/に遷移
    print(type(response)) # class 'django.http.response.HttpResponseRedirect'
    return response

上のように定義するとredirect_view実行時に、立ち上げているアプリケーションの/redirect_success/ページにリダイレクトすることができる。

実際には以下の例のように定義すればよい。
(URLマッピングについてはこちらを参照)

  • プロジェクトのurls.py(URLマッピングを定義)
from django.contrib import admin
from django.urls import path
from django.conf.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('app/', include('app.urls')), # /app/でapp.urlsに遷移
]

  • アプリのurls.py(URLマッピングを定義)
from django.urls import path
from app import views

app_name = 'app'

urlpatterns = [
    path('redirect_view', views.redirect_view, name='redirect_view'), # /app/redirect_viewの遷移画面
    path('redirect_success', views.redirect_success, name='redirect_success'), # /app/redirect_successの遷移画面
]

  • Viewの定義

from django.shortcuts import redirect
from django.http import HttpResponse

def redirect_view(request):
    response = redirect('/app/redirect_success') # /app/redirect_viewに遷移させる
    print(type(response)) # class 'django.http.response.HttpResponseRedirect'
    return response

def redirect_success(request):
    return HttpResponse("リダイレクト成功")

このようにすると、http://○○○.×××/app/redirect_viewを開いた場合にhttp://○○○.×××/app/redirect_successに遷移される。


ターミナルには、以下のようにHTTPステータスコード302(リダイレクトを表す)のログが出力される。

ちなみに以下のように記述しても同様に遷移させることができる。

  • Viewの定義その2

from django.shortcuts import redirect
from django.http import HttpResponse

def redirect_view(request):
    response = redirect('app:redirect_success') # 自動で、/app/redirect_viewと解釈され遷移させる
    print(type(response)) # class 'django.http.response.HttpResponseRedirect'
    return response

def redirect_success(request):
    return HttpResponse("リダイレクト成功")

また、自身のアプリケーションの別のViewにリダイレクトするのでなくて、他サイトに遷移させることもできる。

例えば下のようにするとGoogleに遷移させることもできる。

def redirect_view(request):
    response = redirect('https://google.com')
    return response


HttpResopseRedirectを利用したリダイレクト方法

これまで、redirect関数にリダイレクト先の引数を与えてリダイレクトを行ってきた。

redirect関数を用いると、返り値としてdjango.http.response.HttpResponseRedirectが返される。

このdjango.http.HttpResponseRedirectを直接利用してリダイレクトをすることもできる。

以下のよう記述する。

  • リダイレクトをviewに記述(URLパターンマッチングは省略)
from django.http import HttpResponseRedirect
from django.urls import reverse

def redirect_view(request):
    return HttpResponseRedirect('/app/redirect_success') このようにするとredirect_viewから/app/redirect_successにリダイレクトされる

また、reverse関数(django.urls.reverse)を用いると関数名からURLを逆引きすることもできる。

  • reverseを用いたリダイレクト(HttpResponseRedirect)
def redirect_view(request):
    print(reverse('app:redirect_success')) # /app/redirect_success(URLを逆引き)
    return HttpResponseRedirect(reverse('app:redirect_success')) # /app/redirect_successにリダイレクト


リダイレクトでパラメータを渡す

パラメータを渡してリダイレクトをするには、redirect関数で、第2, 第3引数に値を指定すればよい。

  • urls.pyの記述内容
path('/product//', 'product', name='product') # /product//で遷移する定義
  • views.pyの記述内容1
def redirect_viw(request):
    id = 1
    return redirect('product', id=id) # リダイレクト対象のviewを渡すIDを指定する

また、以下のようにしても同様にリダイレクトすることができる。

  • views.pyの記述内容2
def redirect_viw(request):
    id = 1
    return redirect(f'/product/') # URLに変数を埋め込む

また、?id=○○&name=××
のように値を渡して画面遷移する場合もある。
この場合は、以下のようにurlencode(urllib.parse.urlencode)を利用すればよい

  • views.pyの記述内容
from django.urls import reverse
from urllib.parse import urlencode

def some_view(request):
    id=1, category_id=2
    query_string = urlencode({'id': id, 'category_id': category_id}) # id=1&category_id=2
    url = f'/product_view/?{query_string}' # /products?id=1&category_id=2
    return redirect(url)

def product_view(request):
    category_id = request.GET.get('category_id') # category_idをリクエストから取得

以上、基本的なリダイレクトの方法について紹介しました。

関連記事

Pythonの型ヒント:コレクション型とOptional型の使い方
Pythonの型ヒント:コレクション型とOptional型の…
Python型ヒントについて、変数と関数の引数と戻り値に付与する基本的な書き方について
Python型ヒントについて、変数と関数の引数と戻り値に付与…
【まとめ】よく使うLinuxのショートカット11選
【まとめ】よく使うLinuxのショートカット11選
覚えておくべきLinuxコマンド50選
覚えておくべきLinuxコマンド50選
FlaskでFormを用いてPOSTリクエストを行い、送信された値を取得する
FlaskでFormを用いてPOSTリクエストを行い、送信さ…
Flaskでabortを用いてHTTPException例外を強制的に発生させる
Flaskでabortを用いてHTTPException例外…

Primary Sidebar

人気記事

  • 1
    PyCharm,IntelliJのおすすめプラグイン一覧
  • no image 2
    Python未経験だが、フリーランスの案件に採用さ…
  • 3
    ITエンジニアとしてスキルを高めるためのUdemy講…
  • 4
    アメリカのシリコンバレーでプログラミングを無…

特集記事

  • 1
    Cursorの使用のポイントとコツ(コード補完、イ…
  • 2
    ITエンジニアとしてスキルを高めるためのUdemy講…

目次

1 redirect関数(django.shortcuts.redirect)を用いたリダイレクト
2 HttpResopseRedirectを利用したリダイレクト方法
3 リダイレクトでパラメータを渡す
4 関連記事
StartCode ロゴ
AI時代のエンジニアを最速で育てる
法人向けIT研修で即戦力を育成しています。詳しくはお問い合わせください。
▶ 詳細はこちら
Django講座
【Udemy】Django入門講座(0からDjangoを学習: Python講座つき)
受講生6500人ほどの人気講座。<strong>View, Template, Model, Cla...
詳細 ▶

Footer

利用規約