urls.py
路由分为项目路由(根路由)和应用路由
1. Django执行请求的顺序
- 访问URL(在视图使用链接参考 反向解析 reverse())
- 根URLconf模块
- 应用URLconf模块
- 加载并寻找可用的urlpatterns
- 依次匹配每个URL模式(顺序很重要)
- 正常:导入+调用匹配的视图
- 异常:调用错误处理视图(自定义可参考[路由实例])
2. 示例
2.1. 根路由(项目路由)
# project/urls.pyfrom django.urls import path, includeurlpatterns = [path('community/', include('example.urls')), # 路由转发到应用path('<username>/blog/', include('foo.urls.blog')), # 捕获变量也会一并转发]
2.2. 应用路由
# app/urls.pyfrom django.urls import pathfrom . import viewsapp_name = 'example' # 命名空间urlpatterns = [path('articles/2003/', views.special_case_2003, name='special'), # name 用于反向解析path('articles/<int:year>/', views.year_archive),path('articles/<int:year>/<int:month>/', views.month_archive),path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),]# 比如 `/articles/2003/03/building-a-django-site/` 将匹配最后一个,并调用views.article_detail(request, year=2003, month=3, slug="building-a-django-site")
注意
<>捕获URL中的一段传给视图函数
a.<question_text>默认,字符串
b.<int:year>转换为 int 叫做路径转换器- path() 写路径时不用加前面的/
/article/2003将什么也匹配不到
3. 路径转换器
| 转换器 | 描述 | 例子 |
|---|---|---|
| str | 默认,匹配所有非空字符串 | 不用指明,比如上面的 <username> |
| int | 匹配0和正整数 | |
| slug | 匹配任何ASCII字符以及连接符和下划线 | 比如 building-your-1st-django-site |
| uuid | 匹配uuid格式,返回一个UUID对象 | 匹配值必须使用破折号,所有字母必须小写,比如 075194d3-6885-417e-a8a8-6c931e272f00 |
| path | 匹配任何非空字符串,可以包含’/‘ | 可以匹配整个url而非一段URL字符串 |
