【Django】redirectメソッドの基本・使い方を徹底解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2021年11月)

「データを削除するページを作ったが、実行後のページ移行がうまくいかない!」

「データを保存した後にリストページへ戻りたい!」

などとお考えのDjango初学者へ向けた記事となります

当記事では、

  • redirectメソッドの使い方

を解説します

一度覚えればとてもカンタンです

記述の仕方から、実際のコードを見ていきましょう!

運営者プロフィール

運営者プロフィールアイコン

現在はIT企業のプロダクトマネージャーとして、個人向け/社内向けシステムなど、複数のシステム開発・運営に携わっています。

Webサイト構築やECサイトの開発経験に加えて、PythonなどのプログラミングやSalesforceなどのクラウドアプリケーションに関する幅広い知識・経験を活かして「プログラミング初心者がスムーズに学べるサイト」を目指しています。

Githubでは、趣味で作成したアプリなどを公開しています。

https://github.com/Yulikepython/

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

redirectメソッドの使い方

redirectの使い方は下記の通りです。

  • メソッドのインポート
  • view関数でredirectメソッドを返す

redirectメソッドは引数として、以下のどちらでも使用できます。

  • URL
  • ページ名

当記事では、こちらのとおり、urlpatternsで設定した名前で返すことをおすすめします。

redirect(ページ名)

なぜなら、ページ名なら、URLを変更しても自動的に対応してくれるから。

やり方を見ていきましょう。

コードを見てみよう!

当記事では、日報アプリ開発で作成した3つのview関数で、redirectを設定していきます。

  • 新規保存:クリエイトビュー
  • 上書き保存:アップデートビュー
  • 削除:デリートビュー

まずはviews.pyでメソッドをインポートして進めていきましょう。

from django.shortcuts import redirect

nippoCreateFormView

def nippoCreateFormView(request):
    template_name = "nippo/nippo-form.html"
    form = NippoFormClass(request.POST or None)
    ctx = {"form": form}
    if form.is_valid():
        title = form.cleaned_data["title"]
        content = form.cleaned_data["content"]
        obj = NippoModel(title=title, content=content)
        obj.save()
        return redirect("nippo-list")
    return render(request, template_name, ctx)

nippoUpdateFormView

def nippoUpdateFormView(request, pk):
    template_name = "nippo/nippo-form.html"
    obj = get_object_or_404(NippoModel, pk=pk)
    initial_values = {"title": obj.title, "content":obj.content}
    form = NippoFormClass(request.POST or initial_values)
    ctx = {"form": form}
    ctx["object"] = obj
    if form.is_valid():
        title = form.cleaned_data["title"]
        content = form.cleaned_data["content"]
        obj.title = title
        obj.content = content
        obj.save()
        if request.POST:
            return redirect("nippo-list")
    return render(request, template_name, ctx)

nippoDeleteView

def nippoDeleteView(request, pk):
    template_name = "nippo/nippo-delete.html"
    obj = get_object_or_404(NippoModel, pk=pk)
    ctx = {"object": obj}
    if request.POST:
        obj.delete()
        return redirect("nippo-list")
    return render(request, template_name, ctx)

全ての関数内では共通して、以下を追記してます。

return redirect(“nippo-list”)

※アップデートビューについては「if request.POST:」も追加してますので、参考にしてください

まとめ

redirectメソッドを使うには、以下のステップが必要です。

  • インポート「from django.shortcuts import redirect
  • 実行「redirect(ページ名)

覚えておきましょう!

次回は、「test.py」を使ってこれまでに作成してきたview関数が正しく機能するかを確認する自動テストプログラムの書き方、について解説していきます!

今後のアプリ開発においてとても重要ですので、是非目を通しておくことをオススメします!

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