全书目录

第十四篇:Django 完全指南 —— 中央行政城区宇宙

第三章:URL 路由 —— 中央行政城区的道路与门牌系统

1 分钟 263 字 第 277 / 962 个阅读单元

市民进城后,第一件事不是办业务,而是先找到门牌

这就是 URL 路由。

先给 permits 部门单独建一个 urls.py

py
from django.urls import path
from . import views

app_name = "permits"

urlpatterns = [
    path("", views.index, name="index"),
    path("<int:pk>/", views.detail, name="detail"),
    path("create/", views.create, name="create"),
]

再把它接入总城区路由:

py
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path("admin/", admin.site.urls),
    path("permits/", include("permits.urls")),
]

路由匹配过程可以理解成:

text
请求 /permits/18/
    │
    ▼
总调度看见 "permits/"
    │
    ▼
转给 permits.urls
    │
    ▼
继续匹配 "<int:pk>/"
    │
    ▼
交给 views.detail(request, pk=18)

这里有两个工程习惯非常重要。

第一,路由一定命名

  • name="detail"
  • name="create"

因为你后面应该通过名字反查 URL,而不是到处硬编码路径。

模板里这样写:

django
<a href="{% url 'permits:detail' permit.pk %}">查看详情</a>

Python 里这样写:

py
from django.urls import reverse

reverse("permits:detail", kwargs={"pk": 18})

第二,部门级路由要分文件管理

不要把整个行政城区所有道路都堆在总 urls.py,那样几个月后就会像一张没分区的旧城地图。