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)