Django – render/redirect/HttpResponseなど

概要

ビュー関数/ビュークラスのメソッドはHttpResponseクラスやその派生クラスのインスタンスを戻り値として、テンプレートをレンダリングしたり指定したURLに遷移する。

この戻り値の与え方としては、HttpResponseやその派生クラスのインスタンスを直接与える方法と、django.shortcutsで定義された関数(render、 redirect)を使う方法がある。

HttpResponseはレスポンスボディ―を指定して表示。ショートカットのrenderは引数にテンプレートファイルを指定し、それを表示する。

URLを指定したリダイレクトには、HttpResponseRedirectやショートカットのrenderを使う。

レンダリング

HttpResponse

HttpResponsedjango.httpパッケージのモジュールで、ヘッダーや内容などを持つHTTPレスポンスのクラス。インスタンス生成時に引数にテキストを指定したテキストがレスポンスボディ―になり、直接表示される。

テキストのほか、イテレーターやファイルも指定できる。

render

renderdjango.shortcutsパッケージのモジュールで、指定したテンプレートファイルの内容をHttpRequestインスタンスとして返す。

テンプレートファイルに加えて、テンプレートに引き渡す変数コンテキストも指定できる。

リダイレクト

HttpResponseRedirect

HttpResponseRedirectdjango.httpパッケージのモジュールで、指定したURLに遷移するためのHTTPレスポンスのインスタンスを生成する。

HttpResponseRedirectHttpResponseRedirectBaseを継承し、HttpResponseRedirectBaseHttpResponseを継承している。

ビュー関数/メソッドの中で、URLを引数に与えてHttpResponseRedirectのインスタンスを生成し、戻り値にそのインスタンスを渡すことで、指定したURLにリダイレクトされる。

引数のURLは以下のように与えることができる。

  • ホスト名を含む絶対URL
  • アプリケーション名から始まるサブディレクトリーによる相対URL
  • urls.pypath関数で設定したルート名をreverse関数の引数に与えた戻り値(ルート名を直接与えることはできない)

redirect

redirectはdjango.shortcutsパッケージのモジュールで、指定したURLにリダイレクトするためのHTTPレスポンのためのスインスタンスを返す。

redirectは関数として定義され、デフォルトではHttpResponseRedirectのインスタンスを返すが、引数にpermanent=Trueを設定すると、HttpResponsePermanentRedirectのインスタンスを返す(このクラスは301ステータスを返す)。

redirectHttpResponseRedirectを返す際、resolve_url関数を介していて、reverse関数を使わず直接ルート名を渡すことができる。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です