Django – Tutorial – ビューへのルーティング

概要

DjangoドキュメントのチュートリアルPart3では、ビューへのルーティングやテンプレートの使い方などが詳しく書かれているが、このうちURLconf~ルーティングの部分を整理する。

urls.pyの配置や書き方についてはこちら

view関数の定義

まず、polls/views.pyファイルに3つのview関数(detail, results, vote)を追加する。

いずれのビューでも動作の本質は同じ。

  • リクエストからパラメーターをquestion_idとして受け取る
  • 各ビューで想定している処理の内容に即したテキストをHttpResponseで返す
  • その際、question_idの値もテキストに含めて返す

なおテキストにquestion_idの内容を文字列として含めるために、Pythonの構文を使っている。

"... %s ..." % 変数

urls.pyの設定

追加したview関数をこれに対応したURLリクエストから呼び出すため、ルーティングを追加する。

いずれのルーティングもpollsアプリケーションのビューに関するものなので、最初に作成したpolls/urls.pyに追記する。

確認

サーバー起動状態で各URLを入力したとき、呼ばれるview関数とブラウザー上の文字列は以下のとおり。

  • http://localhost:8000/polls/34/
    views.detail
    →You’re looking at question 34.
  • http://localhost:8000/polls/34/results/
    views.results
    →You’re looking at the results of question 34.
  • http://localhost:8000/polls/34/vote
    views.vote
    →You’re voting on question 34.

URLconf~ルーティングの仕組み

たとえばhttp://ドメイン名/polls/34/というURLでリクエストがあった時、Djangoは以下のように解釈を始める。

  1. settings.pyROOT_URLCONFの設定に従って、config.urlsモジュールを読み込む(モジュールファイルはconfig/urls.py
  2. urlsモジュール中のurl_patterns配列から、パターンを1つずつ順に走査していく
  3. URLパターンが'polls/'パターンまでマッチした時、それ以前のパターンを取り除いて、polls.urlsモジュールを読み込む
  4. polls.urlsモジュールでURLパターンの'<int:question_id>/'パターンまでマッチしてその後がないとき、これに対応するviews.detailモジュールを呼び出す
  5. detailモジュールでは<int:queston_id>の内容が引数のquestion_idに渡され、ビュー内での処理に使われる

なおsettings.pyROOT_URLCONFはデフォルトで以下のように書かれていて、まずconfig.urlsが読み込まれるようになっている。

またconfig.urlsは、チュートリアルの最初の方で以下のように編集済み。

またパラメーターについては<int:question_id>と定義されているので、localhost:8000/polls/abc/のようにパラメーターが整数として解釈されない場合にはパスが見つからず、Page not foundエラーになる。

 

コメントを残す

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