single.php

djangoでURLからパラメータを取得する手順(URLConf)

PythonでWebアプリを開発する際に利用できるdjangoでURLの一部をパラメータとして取得する手順を備忘録的に投稿します。

GETパラメータで取得

最も簡単な方法は、GETパラメータとして受け渡す方法です。URLConf(urls.py)を特に編集しなくても、URLの末尾に “?p=パラメータ” などで受け取ったページ内でURLに追加された内容を受け取ることができます。

具体的には[urls.py]を次のように編集して

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

[vires.py]に次のようなコードを追加します。

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    result = 'Hello World.' 
    if 'p' in request.GET:
        result = request.GET['p']

    return HttpResponse(result)

実行時にURLを参照した場合には、次のように表示されます。

localhost:8000/api/

実行時にURLを次のように参照した場合には、URLに含まれた文字を取り出すことができます。

localhost:8000/api/?p=1

URLに直接パラメータを埋め込む方法

例えば、サービスのAPIなどを利用する際に次のURLのような呼び出しを見かけます。

https://servicename/api/archive/2021/02

“?p=パラメータ” のようにURLに追加せずにURLの一部を引数のように利用することもできます。

実際には手順は次のように行います。

1. [urls.py]を編集して次のようにします。

urlpatterns = [
    path('', views.index, name='index'),
    path('<p>', views.getparam1, name='getparam1'),
]

2. [views.py]ファイルに、次のコードを追加します。

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    result = 'Hello World.' 
    if 'p' in request.GET:
        result = request.GET['p']

    return HttpResponse(result)

def getparam1(request, p):
    result = p
    return HttpResponse(result)

3. [ターミナル]画面に次のコマンドを入力します。

python manage.py runserver

5. ブラウザで次のURLを表示します。

localhost:8000/api/10

入力した値がページに表示されます。

複数のパラメータをURLに追加する方法

パラメータを複数含めることで階層的にURLを利用することができます。

先ほど編集した[urls.py]を次のように編集します。

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('<p>', views.getparam1, name='getparam1'),
    path('<p>/<q>', views.getparam2, name='getparam2'),
]

[views.py]に次のコードを追加します。

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    result = 'Hello World.' 
    if 'p' in request.GET:
        result = request.GET['p']

    return HttpResponse(result)

def getparam1(request, p):
    result = p
    return HttpResponse(result)

def getparam2(request, p, q):
    param1 = p
    param2 = q
    result = param1 + ':' + param2
    return HttpResponse(result)

このように、URL部分を拡張して複数のパラメータを取得できるようになります。

先ほどと同様に次のURLをブラウザで表示します。

localhost:8000/10/20

ページ内でURLに含まれた2つのパラメータを取得することができます。

まとめ

Pythonで利用できる[django]利用してWebアプリケーションを開発する際に[urls.py]を使って、URLの一部をパラメータとして利用することができます。

“?p=” のようなGETパラメータを使って取得することも可能ですが、

/api/username/property
/api/archive/2020
/api/archive/2020
/02

のように階層的に理解ができるURLを作ることができるので、APIとして提供する際に便利な使い方ができます。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

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