【Django】views.py:renderメソッドの使い方(引数:request、context、template)

時計 2021.07.03 / 時計

【Django】views.py:renderメソッドの使い方(引数:request、context、template)

本記事ではDjangoviews.pyで使用する、renderメソッドについて詳しく解説していきます。

renderメソッドとは、指定されたテンプレートをレンダリングして、HttpResponseを返す(レスポンス)ためのメソッドです。

views.pyで使用する関数ベースビューでは、renderメソッドが最も使われているメソッドであり、Djangoチュートリアルでもほぼ必ず使われるメソッドです。

しかしチュートリアルなどでも、あまりrenderメソッドについて詳しく解説していることはないです。
そのためなんとなくの理解でrenderメソッドを使っている方が多いです。

renderメソッドがどういった役割を果たしているのか理解すると、Webアプリケーション開発に役立ちます。
ぜひ本記事でrenderメソッドの理解を深めてください。

本記事を通して以下の知識を学べます。

学べる知識
  • HTTPレスポンスについて
  • renderメソッドの使い方
  • renderメソッドで指定する引数について
  • HttpResponseとrenderの違い

HTTPレスポンス(Http Response)

ユーザーはWebサイト(ブラウザ)を通してサーバーにHTTPリクエストを送ります。
このHTTPリクエストとは、新しいページの閲覧や情報の登録などをするための要求です。

この要求(HTTPリクエスト)に対する応答がHTTPレスポンスです。

つまりブラウザはHTTPリクエストをサーバーに送り、サーバーはHTTPレスポンスをブラウザに送るということです。

HTTPリクエストとHTTPレスポンス

HTTPレスポンスを受け取ったブラウザはその結果(HTML)を表示します。

本記事で扱うrenderメソッドは、このHTTPレスポンスを生成するためのメソッドです。

renderメソッド

renderメソッドとは

renderメソッドは、指定したテンプレートにコンテキスト(辞書型データ)を反映し、レンダリングしたHttpResponseオブジェクトを返します。

つまりデータベースのデータなどを反映させたHTMLページを作成して、HTTPレスポンスとしてブラウザに返すということです。

関数ベースのビューで最もよく使われるメソッドです。

renderメソッドはプログラムの先頭でdjango.shortcutsからインポートする必要があります。

from django.shortcuts import render

renderメソッドの文法

以下にrenderメソッドの文法を記します。

return render(request, template_name, context=None, content_type=None, status=None, using=None)

renderメソッドの必須引数として、requestとtemplateの2つがあります。
この2つの引数は必ず指定する必要があります。

オプション引数には、contextとcontent_type、status、usingの4つが存在します。

request

requestにはgetまたはpostの情報や、セッション情報が格納されています。

template_name

templateには表示させるテンプレート(HTMLファイル)を指定します。

注意点としては、templateフォルダをスタートとする相対パスで指定します。

例えばtemplate/office54/index.htmlの場合は、templateにはoffice54/index.htmlと指定します。

context

contextには辞書型のデータを指定します。
このcontextに入れた辞書データがテンプレートに渡されます。

contextにはデータベース操作をして取得したデータなどを格納します。

views.py内でrenderメソッドが行っていること

より詳しくviews.pyの中でrenderメソッドが行っていることを解説します。

次図ではWebブラウザからサーバーにHTTPリクエストが送られてから、サーバーがブラウザにHTTPレスポンスを返すまでの流れです。

HTTPリクエストとHTTPレスポンスの流れ

上図は次のような流れで動いていることを示しています。

  1. ブラウザはサーバーにHTTPリクエストを送信
  2. urls.pyから一致するURLパターンを検索
  3. 一致したURLパターンに紐づいているviews.py内の関数を実行
  4. 関数はモデル(models.py)を通してデータベース操作を行いデータを取得
  5. templateフォルダからtemplate_nameで指定されているテンプレートを取得
  6. データベースのデータ(context)をテンプレートに反映
  7. 作成されたHTMLをHTTPレスポンスでブラウザに返す

上記流れの中でrenderメソッドは5、6,7を行っています。

必須引数のtemplate_nameで指定されているテンプレートにアクセスし、contextの辞書データを反映させHTMLを作成。そしてそのHTMLをHTTPレスポンスでブラウザに返しています。

HttpResponseとの違い

HttpResponseは指定した文字列をHTTPレスポンスとして返す、ファイル(PDFやエクセル)をブラウザに表示する、ファイルをダウンロードさせることが可能です。

ですがHttpResponseではcontextのようなデータをテンプレートに渡すことができません。

そのため多くの場合、関数ベースビューではrenderメソッドを使います。

ファイルの表示やダウンロードをブラウザ側でさせる場合にHttpResponseを使います。

まとめ

本記事「【Django】views.py:renderメソッドの使い方(引数:request、context、template)」はいかがでしたか。

renderメソッドはDjangoを覚え初めのころから使うメソッドですが、よく理解せずに使用している人が多いメソッドです。

今後はrenderメソッドを理解し、そこでどういった動きがされているのか考えながら使ってみてください。