引き続きPythonのWebフレームワーク「Django」のチュートリアルを進めていく。
前回記事はこちら。
【Django】管理画面adminからアプリを編集できるようにする
今回は、ユーザーがアクセスするURLに応じて、対応するビューを表示させるところまで紹介する。
ビューの作成
今回新たに作成するビューは次のとおり。
- 質問詳細ページ(最新の質問を表示)
- 質問結果ページ(特定の質問の結果を表示)
- 投票ページ(特定の質問の投票受付)
polls/views.pyを開き、以下3つのクラスを作成する。
def detail(request, question_id):
return HttpResponse("You're looking at question %s." % question_id)
def results(request, question_id):
response = "You're looking at the results of question %s."
return HttpResponse(response % question_id)
def vote(request, question_id):
return HttpResponse("You're voting on question %s." % question_id)
ビューはPythonクラスとして構成され、表示する要素をHttpResponseオブジェクトとして返す。
今回は単純に文字列を返すだけのシンプルなビューにした。
URLルーティングの設定
polls/urls.pyを開き、urlpatternsを以下のとおり編集する。
urlpatterns = [
path('', views.index, name='index'),
# 以下を追加
path('<int:question_id>/', views.detail, name='detail'),
path('<int:question_id>/results/', views.results, name='results'),
path('<int:question_id>/vote/', views.vote, name='vote'),
]
path関数の第一引数にはURLパターンを定義し、第二引数に表示するビュークラスを指定する。
今回のコードを解説すると、int型(整数)の値を質問IDとして取得し、先ほど作成したビュークラスの引数question_idとして渡している。
開発サーバーで確認
それでは開発サーバーを起動し、実際にURLへアクセスしてみよう。
python manage.py runserver
架空の質問ID:50にアクセスしてみる。
http://127.0.0.1:8000/polls/50/
また、resultsやvoteにもそれぞれアクセスしてみる。
http://127.0.0.1:8000/polls/50/results/
http://127.0.0.1:8000/polls/50/vote/
アクセスしたURLに応じて、ビューの返す文字列が変わっていればルーティングはうまくいっている。