Django template viewのリクエストから表示までの流れ

はじめに

Class-based viewでのtempalteViewのリクエストからレンダリングまでの流れを調べた。

templateView

TemplateViewはViewクラスをオーバライドしたテンプレートを表示するためのViewクラス。 実装は以下。 github.com

templateViewのコードリーディング

継承

  • View
  • ContextMixin
  • TempalteResponseMixin

(継承順)

View

Viewクラスで使っているのは以下のメソッド

ContextMixin

Viewクラスで使っているのは以下のメソッド

  • https://github.com/django/django/blob/master/django/views/generic/base.py#L19-L30
  • テンプレートにわたす変数を追加
  • self.get_context_data()がここをget()等各メソッドで呼び出す
  • 変数変更する場合はget_context_data()をオーバーライドする
    • ただし親=ContextMixinのget_context_dataを継承しないとviewという変数がテンプレートで使えないので注意

TempalteResponseMixin

メソッド

処理順

  1. リクエストをうける
  2. (多くの場合)urls.py経由でas_view()がよばれる
  3. dispatch()にrequest, *args, **kwargsが渡される
  4. dispatchでhttp_requestを確認して、定義されたhttp request methodを呼び出して返すか、405を返す
  5. 定義されたhttp request methodでget_context_dataを呼び出してcontextを生成&+α処理をする
  6. render_to_responseでcontextをtempalteに描画する

参考

https://e-tec-memo.herokuapp.com/article/85/