Django 路由分发:把 100 条 URL 拆成 10 份

举报
周杰伦本人 发表于 2025/07/30 14:11:08 2025/07/30
【摘要】 Django 路由分发:把 100 条 URL 拆成 10 份项目路由只当“总调度”,子应用路由各管各的,代码清爽可维护。一、为什么会有 404浏览器敲 http://127.0.0.1:8000/index/ → Django 只在 urlpatterns 里找匹配 → 找不到就 404。想让 /index/ 能访问,就必须在路由表里加一条对应规则。二、集中写路由的痛点全部路由都堆在项目...

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.indexbook.views.index 就是找到 book/views.py 里的 index 函数并调用。

  • 访问 /book/ 开头的一切 → 全部转发到子应用 book.urls 继续匹配。

book.urls 就是“子应用 book 的 urls.py”,用 include() 把它挂到主路由上,实现路由分治。


四、路由匹配顺序

  1. Django 自上而下遍历 urlpatterns

  2. 命中即停;未命中 → 404。

  3. include() 只是把剩余部分交给下级路由继续匹配。


五、实战口诀

  • 子应用路由文件:app/urls.py

  • 固定写法:urlpatterns = [...]

  • 固定导入:from django.urls import path

  • 固定转发:path('<前缀>/', include('app.urls'))


六、一分钟复盘

  1. 总路由只留 include —— 像“组长收作业”。

  2. 每个子应用自己写 urls.py —— 像“组员交作业”。

  3. 修改后重启服务 → 访问 /前缀/路由/ → 成功。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。