本文へスキップ
BecomeCoder

Djangoコース · 第2章 URLとビュー · レッスン5

URLとビューを結ぶ ― urlpatterns と path

ブラウザで完結

導入

Web アプリは、たいてい複数のページを持ちます。トップ、会社概要、お問い合わせ……。それぞれの URL に対応するビューを、Django では urlpatterns という表にまとめて登録します。

説明

path("URL", ビュー) を並べたリストが URL 表です。Django はリクエストが来ると、この表を上から順に照らし合わせ、最初に一致した URL のビューを呼びます。

import django
from django.conf import settings
if not settings.configured:
    settings.configure(DEBUG=True, SECRET_KEY="dev",
        ROOT_URLCONF=__name__, ALLOWED_HOSTS=["testserver"])
    django.setup()

from django.http import HttpResponse
from django.urls import path

def home(request):
    return HttpResponse("ホーム")

def company(request):
    return HttpResponse("会社概要")

def contact(request):
    return HttpResponse("お問い合わせ")

urlpatterns = [
    path("", home),            # /
    path("company/", company), # /company/
    path("contact/", contact), # /contact/
]

from django.test import Client
client = Client()
for url in ["/", "/company/", "/contact/"]:
    print(url, "->", client.get(url).content.decode())
  • URL は先頭の /書きません"company/")。末尾の / は付けるのが Django の作法です。
  • 存在しない URL(例:/nothing/)にアクセスすると、Django は自動的に 404 Not Found を返します。あとで確かめます。

やってみよう

for ループの URL リストに "/nothing/" を足して実行してみましょう。登録していない URL なので、そのビューは呼ばれず、client.get("/nothing/").status_code404 になります(本文の代わりにステータスを見てみましょう)。

演習

/price/ にアクセスすると 料金プラン を返すビュー price を作り、urlpatterns に登録してください。最後に print(client.get("/price/").content.decode()) で確認します。

ヒント1を見る

def price(request): return HttpResponse("料金プラン")

ヒント2を見る

urlpatternspath("price/", price) を追加します。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

Python — ライブラリ付きで実行(Pyodide)

numpy / pandas / matplotlib が使える本物のPython(Pyodide)を読み込みます。初回のみ読み込みに少し時間がかかります(以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。