命名 URL
本课属于 Coddy Django 学习旅程的“Django 基础”单元。第 10 课,共 23 课。
主页应该链接到“关于”页面。在每个链接中输入 "/about/" 虽然可行,但只要地址发生变化,所有链接就都会失效。你可以给每个路由命名,再根据名称生成地址。商店应用的 urls.py:
app_name = "shop"
urlpatterns = [
path("cart/", views.cart, name="cart"),
path("products/<slug:slug>/", views.product, name="product"),
]app_name 会将这些名称放入一个命名空间:完整名称是 "shop:cart",因此两个应用都可以各自拥有一个 home。reverse() 会将名称转换回地址。如果商店应用包含在 shop/ 下:
from django.urls import reverse
reverse("shop:cart") # "/shop/cart/"
reverse("shop:product", args=["mug"]) # "/shop/products/mug/"在视图中调用 reverse()。如果在 views.py 顶部调用,它会在路由创建之前运行。
将 "cart/" 改为 "basket/",所有根据名称生成的地址都会随之更新。
挑战
简单按名称将主页链接到“关于”页面。
- 在
menu/urls.py中,将app_name设置为"menu",并为每个路由命名,名称与对应视图相同:home、about、hours、contact、table、drink、order。 - 在
menu/views.py中,从django.urls导入reverse。在home中,添加一个链接,链接文字为About us,其href为reverse("menu:about")。
点击 About us:“关于”页面会打开。
亲手试试
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 在线编辑器