引き続き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に応じて、ビューの返す文字列が変わっていればルーティングはうまくいっている。