Django 路由分发:把 100 条 URL 拆成 10 份
Django 路由分发:把 100 条 URL 拆成 10 份
项目路由只当“总调度”,子应用路由各管各的,代码清爽可维护。
一、为什么会有 404
浏览器敲 http://127.0.0.1:8000/index/ → Django 只在 urlpatterns 里找匹配 → 找不到就 404。
想让 /index/ 能访问,就必须在路由表里加一条对应规则。
二、集中写路由的痛点
全部路由都堆在项目级 book_manager/urls.py:
urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', index),
    path('book/list/', book_list),
    path('book/detail/<int:id>/', book_detail),
    ...  # 100 条后文件爆炸
]
但是如果有100条文件就有100条路由,维护困难 ,怎么解决呢?一个字,拆!
三、拆路由 3 步走
| 步骤 | 动作 | 代码示例 | 
|---|---|---|
| ① 子应用建路由 | 在 book/urls.py新建 | 见下方代码块 | 
| ② 导入 include | 项目级 urls.py顶部 | from django.urls import path, include | 
| ③ 总路由转发 | 项目级 urls.py加一条 | path('book/', include('book.urls')) | 
book/urls.py(子应用级)
from django.urls import path
from .views import index
urlpatterns = [
    path('index/', index, name='index'),
]
book_manager/urls.py(项目级)
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/', include('book.urls')),   # 关键一行
]
项目级的导入子应用级的
效果
- 
访问 /book/index/→ 触发book.views.index,book.views.index就是找到book/views.py里的index函数并调用。
- 
访问 /book/开头的一切 → 全部转发到子应用book.urls继续匹配。
book.urls 就是“子应用 book 的 urls.py”,用 include() 把它挂到主路由上,实现路由分治。
四、路由匹配顺序
- 
Django 自上而下遍历 urlpatterns。
- 
命中即停;未命中 → 404。 
- 
include()只是把剩余部分交给下级路由继续匹配。
五、实战口诀
- 
子应用路由文件: app/urls.py
- 
固定写法: urlpatterns = [...]
- 
固定导入: from django.urls import path
- 
固定转发: path('<前缀>/', include('app.urls'))
六、一分钟复盘
- 
总路由只留 include—— 像“组长收作业”。
- 
每个子应用自己写 urls.py—— 像“组员交作业”。
- 
修改后重启服务 → 访问 /前缀/路由/→ 成功。
- 点赞
- 收藏
- 关注作者
 
             
           
评论(0)