Djangoのurlモジュールの使い方|pathやincludeの使い方を解説する

スポンサーリンク

この記事では、Django の URL マッピングと、URL リクエストとそれに対応する View をリンクさせる方法について詳しく学びます。

最初の記事で、チュートリアルの最後に入力した sayHello/ ページに Django Hello World を表示するために、具体的にどのように、何をしたかを理解します。

まずは Django の URL ライブラリを理解することから始めましょう。

スポンサーリンク

Django URL ライブラリの基本

django.urls ライブラリには、私たちの Web アプリケーションで使う様々な関数があり ます。

それらについてもっと学びましょう。

1. path(route,view, kwargs, name)

この関数は、urlpatternsに含まれる必要がある要素を返します。

つまり、pathは要素(例えばView)とそのURLの間のリンクとして機能します。

  1. ルート

これは、特定のビューのURLです。

例えば: ‘/’ はルートです。

つまり、URLからこのページを要求すると、サーバーはそのページにリンクされたビューを返します。

  1. ビュー

ここでは、リンクする必要のあるビューの名前を記述する必要があります。

または、”include “関数を使って、別のurls.pyファイルを追加します。

  1. **3. **kwargs and *args

Pythonの関数定義におけるargsは、変数入力の引数リストとして使用される構文です。

アスタリスク1個で使用します。

例えば、ある関数に任意の数の引数を入力する必要がある場合、 *args を使用します。

例えば、次の例を見てみましょう。

def myFun(*args):
    for arg in args:
        print(arg)
 
 
myFun("Hello","There","Hi","There")

つまり、ここでは引数をいくつでも指定することができ、その引数をすべて取り込んでくれるのです。

argで引数をリストとして保存し、argsでargの行を使用することで、リストから各要素を取り出していると考えることができます。

このように、argsはリストとして、argはリストとして、それぞれ要素を与えています。

というわけで、上記のコードを実行すると、以下のようになります。

def myFun(**kwargs):
    for item,price in kwargs.items():
        print(f"{item}={price}")
 
myFun(Book=100,Pen=10,Watch=4000)

Pythonの関数定義におけるkwargsは、キーワードとなる変数引数のリストとして使用されます。

これはダブルアスタリスクで使われる。

つまり、例えば、ある関数に任意の数の引数(キーワード)を入力する必要がある場合は、 **kwargs を使用します。

例えば、key-wordedの意味を理解するために、次のような例を見てみましょう。

path('name/<int:id>',views.name_id,{"foo":"bar"})

上の例でわかるように、完全な値を渡すことができます。

変数名とその変数が持つ値を、代入演算子を使って渡しているのです。

引数はkwargsによってPythonの辞書として保存されていると考えることができます。

したがって、kwargs.items()の項目、価格の行を使って、項目(本、ペンなど)とその価格(100、10など)を取り上げているのです。

*** は、辞書を要素に分割します。

このように、key-wordの要素を個別に取得できるのが *kwargs であり、key-wordの要素を辞書として取得できるのが kwargs です。

path(‘ ’, sayHello, name = ‘sayHello’)

Django の path() では、URL ルートと一緒にビューにもっと情報を送る必要がある場合、 kwargs を使うことができます。

例えば

path(‘sayHello/’,include(‘HellpWorldApp.urls’))

name/25 という URL を使って、 Django は views.name_id( request, id = 25, foo =’bar’) を呼び出します。

  1. 名前

Name は URL がリンクしている特定のビューの名前を指定するために使われます。

2. include(module,namespace=None)

この関数は、include 関数によってインクルードされるべき別の URL conf ファイルを受け取ります。

つまり、他のurls.pyファイルとリンクを形成するには、include関数を使用する必要があります。

名前空間は内部に記述することもできますが、今はその必要はありません。

Django で URL をビューにマップする方法?

path(‘sayHello/’, include(HelloWorldApp.urls)),

ここでは、上で学んだ構文で path() 関数を使っています。

path(‘sayHello/’, sayHello, name = ‘sayHello’)

ここで sayHello は views.py の関数ベースのビュー名です。

パスには空白文字列を指定し、ベースディレクトリ (私の場合は http://127.0.0.1:8000/) からビューに直接アクセスできるようにしています。

Django プロジェクトにおける URL マッピング

path(‘ ’, include(HelloWorldApp.urls))

path() 関数は、アプリに存在する urls.py ファイルに URL をリンクしています。

そのため、上で学習した構文で include() 関数が必要です。

例えば、ここでは

def Books(request):
    return HttpResponse("This is a books webpage")

path と include 関数の他に、 re.path() と register_converter() 関数がありますが、 Python-Django のコースではあまり使うことはありません。

Note: project/urls.py で、私たちは次のように使いました。

path('Books/', Books,name='Books'),

ここで、app/urls.py で sayHello/ と書いても、project/urls.py で単に ‘ ‘ と書いても、動作は同じになります。

以下は実装例です。

apps/urls.pyです。

def BookID(request,bookid):
    return HttpResponse(f"The book Id is:{bookid}")

projects/urls.py:

path('Books/<int:bookid>', BookID, name='BookID'),

複数のViewを使用する場合は、この新しい方法を使用することが推奨されます。

したがって、今後は、エンドポイントを apps/urls.py に、’ ‘(ホストウェブサイトのリンク)を project/urls.py に保持することになります。

したがって、以下の画像のように変更することができます

Args
Args
Kwargs
Kwargs

パスとインクルード関数についてわかったところで、1つ動かして複数のビューを作り、異なるエンドポイントにリンクさせましょう。

複数の View に対応する Django の URL マッピング

hello world の記事で行ったように、views.py にもう一つ View を追加していきます。

ビュー Book を作成しましょう。

コードを追加します。

UrlsHelloWorldApp 2
apps/urls.py
project/urls.py
project/urls.py

新しいViewのために、別のエンドポイントを作成する必要があります。

apps/urls.py の中で、エンドポイント ‘ Books/’ のパスを追加するだけです。

App/urls.py
App/urls.py
project/urls.py
project/urls.py

では、サーバを起動して、ブラウザで確認してみましょう。

views.py(Books)
views.py(Books)
UrlsBook
apps/urls.py

URL マッピング – 変数エンドポイント

本のIDをリクエストとして受け取り、単にIDを示す行を返すViewを作成してみましょう。

views.pyで、’Books/’のようなエンドポイントを持つ別のViewを作成しましょう。

Runserver
Runserver

ここでは、リクエストと一緒に本のIDを受け取り、その特定の本に特化したレスポンスを返します。

Browser Books/
Browser Books/

ここで、apps/urls.pyにエンドポイントを追加する必要があります。

Views.py(BookID)
Views.py(BookID)
UrlsBookID
apps/urls.py

ここでは、のような構文で記述します。

実行し、確認してみましょう。

Runserver
Runserver

ブラウザを起動して、127.0.0.1:8000/Books/1にアクセスしましょう。

Browser 1
Browser 1

他のランダムなBook IDを確認することもできます。

Browser 23
Browser 23

私たちのWebページが動作していることがわかります。

このように、上記の知識を使って、任意のViewをURLと対応付けることができます。

まとめ

というわけで、これで終わりです。

さて、次は Django のビューについて、そして views.py で実際に行ったことについて書く番です。

となります。

タイトルとURLをコピーしました