名前付きURL
CoddyのDjangoジャーニー「Djangoの基礎」セクションの一部。レッスン 10/23。
ホームページから About にリンクする必要があります。すべてのリンクに "/about/" と入力する方法は、アドレスが変わるまでは機能しますが、変わるとすべてのリンクが壊れます。代わりに、各ルートに名前を付け、その名前からアドレスを組み立てます。shop アプリの urls.py は次のとおりです。
app_name = "shop"
urlpatterns = [
path("cart/", views.cart, name="cart"),
path("products/<slug:slug>/", views.product, name="product"),
]app_name は名前を名前空間にまとめます。完全な名前は "shop:cart" なので、2つのアプリがそれぞれ home を持つことができます。reverse() は名前をアドレスに戻します。shop を shop/ の下に含めた場合は、次のようになります。
from django.urls import reverse
reverse("shop:cart") # "/shop/cart/"
reverse("shop:product", args=["mug"]) # "/shop/products/mug/"ビューの中で reverse() を呼び出します。views.py の先頭で呼び出すと、ルートが存在する前に実行されてしまいます。
"cart/" を "basket/" に変更すると、その名前から組み立てられるすべてのアドレスに変更が反映されます。
チャレンジ
簡単ホームページを名前で About にリンクします。
menu/urls.pyで、app_nameを"menu"に設定し、各ルートに対応するビューの名前を付けます:home、about、hours、contact、table、drink、order。menu/views.pyで、django.urlsからreverseをインポートします。homeに、hrefがreverse("menu:about")のAbout usリンクを追加します。
「About us」をクリックすると、About ページが開きます。
自分で試してみよう
from django.urls import path
from . import views
urlpatterns = [
path("", views.home),
path("about/", views.about),
path("hours/", views.hours),
path("contact/", views.contact),
path("table/<int:number>/", views.table),
path("drinks/<slug:slug>/", views.drink),
path("order/", views.order),
]
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Djangoの基礎のすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド