SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【Django入門】ビューでリクエストのクエリパラメータを扱う



前回作成したビューは固定の画面を表示するだけだったので、パラメータに応じて表示を変える方法を確認します。

・前回記事
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ページの基本を覚えよう