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

Django

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

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

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

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

当記事では、

  • redirectメソッドの使い方

を解説します

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

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

【著者プロフィール】

profile_icon
【Python歴】11年 x 【Django歴】10年
HP作成、社内システムの構築、コンサルティング

当ブログを通じて、Webアプリの書き方やアプリの公開方法までを解説しています。

☆日報アプリ「D-Repo」(デモ版)→こちら

※Djangoをベースに作成したアプリです。

☆便利ツールアプリ「Tool Station」→こちら

※Django REST frameworkとReactで作成しているアプリです。

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関数が正しく機能するかを確認する自動テストプログラムの書き方、について解説していきます!

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

✔当ブログは以下のような方に向けて書かれています

「Djangoでのアプリ開発を学びたい!」

「Djangoで開発したアプリをWebで公開するにはどうするの?」

✔当ブログ掲載の記事

  • Djangoで作る日報アプリ開発
  • WebアプリをWeb上に公開する方法
  • Webアプリ開発に必要なそのほかの情報
【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

ITCブログにご協力いただける方は、以下もご検討いただけると嬉しいです。

ITCへ投げ銭をする

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