Menu
CoddyTech

命名 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/",所有根据名称生成的地址都会随之更新。

challenge icon

挑战

简单

按名称将主页链接到“关于”页面。

  1. 在 menu/urls.py 中,将 app_name 设置为 "menu",并为每个路由命名,名称与对应视图相同:home、about、hours、contact、table、drink、order。
  2. 在 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),
]
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

Django 基础中的所有课

自己练习: Django 在线编辑器