前回作成したビューは固定の画面を表示するだけだったので、パラメータに応じて表示を変える方法を確認します。
・前回記事
www.wantanblog.com
クエリパラメータ
クエリパラメータに対応したビュー
前回作成した以下のURLにクエリパラメータが追加された場合でも対応できるようにします。
http://localhost:8000/hello/message
クエリパラメータが追加されたURLは例えば以下のようなURLです。
http://localhost:8000/hello/message?msg=wantan
最低限対応するためには、アプリケーションのviews.py
を以下のように編集します。今回の対応はmessage
関数の部分だけです。
from ast import If from unittest import result from django.shortcuts import render from django.http import HttpResponse def index(request): return HttpResponse("Hello Django") def message(request): if "msg" in request.GET: msg = request.GET['msg'] result = "message: " + msg else: result = "no message" return HttpResponse(result)
上記の編集を行ったらサーバを起動してブラウザから確認する。
・クエリパラメータがない場合
http://localhost:8000/hello/message
・クエリパラメータがある場合
http://localhost:8000/hello/message?msg=wantan
問題なさそうです。
クエリパラメータを使わないURLに対応する
例えば以下のようなクエリパラメータつきのURLを
http://localhost:8000/hello/message?msg=wantan
次のように表現する。
http://localhost:8000/hello/message/wantan
まずはviews.py
にアクセスするためのアプリケーションのurls.py
を編集します。
・hello_app/urls.py
from django.contrib import admin from django.urls import path from hello_app import views urlpatterns = [ path('', views.index,name='index'), path('message/<msg>', views.message,name='massage') ]
ビュー側の関数では引数で受け取るような方法になる。
・hello_app/views.py
from ast import If from unittest import result from django.shortcuts import render from django.http import HttpResponse def index(request): return HttpResponse("Hello Django") def message(request,msg): result = "message: " + msg return HttpResponse(result)
・画面表示
メモ:
以下のような書き方の場合、message/
以下のパラメータがない場合にはエラーとなる。
path('message/<msg>', views.message,name='massage')
上記のような形式で書いても良いが、テキストや数値という型が明確に決まってる場合には、以下のように明示するのが一般的。
path('<int:num>', views.message,name='massage')
また、例えば以下のようなURLで複数のパラメータを扱うこともできる。
http://localhost:8000/hello/2022/08/16
path('<int:year>/<int:month>/<int:day>', views.message,name='massage')
・参考書籍
- 第2章 ビューとテンプレート
- 2-1Webページの基本を覚えよう