django路由模块
路由模块
一个包含urlpatterns
变量的python模块,在django中,它一般叫urls.py
,存在于项目目录和应用目录下。
根路由
最外层的路由模块,路由解析入口。django通过该设置ROOT_URLCONF
来确定主路由模块,通常是在项目目录下的urls.py
模块。
子路由
主路由之外的其他路由都是子路由,一般都是各自应用目录下的urls.py
模块。
path()
path(route, view, kwargs=None, name=None)
返回一个对象,表示一条路由个规则包含在urlpatterns
中
- route: 一个字符串,表示url路径
- view :一个视图
- kwargs: 一个字典,需要传入的额外参数
- name url:的命令
在url中捕获参数
django 允许在url中捕获参数,如果想要在url中捕获参数,使用尖括号,尖括号中定义变量名,捕获的值会传递给对应的视图相同名称的形参:
注意:< >捕获的值,默认是一个字符串。
路径参数类型转换
通过<type:name>
这样的格式,可以解决上面的问题。
tpye默认转换器:
- str 匹配除路径分隔符'/'之外的任何非空字符串。如果表达式中不包含转换器<name>,默认就是str
- int 匹配0或任何正整数。返回一个int
- slug 匹配任何由ascii字符或数字组成的slug字符串,加上连字符和下划线。
- uuid 匹配格式化的uuid。
- path 匹配任何非空字符串,包括路径分隔符。可以匹配完整的url路径。
re_path
当需要对路径参数做限制,就要用到re_path
re_path(route, view, kwargs=None, name=None)
返回一个对象,表示一条路由个规则包含在urlpatterns
- route 一个字符串,表示一个正则表达式,用来匹配url
- view一个视图
- kwargs一个字典,需要传入的额外参数
- name url的命令
当进行匹配时,从正则表达式中捕获的组会被传递给视图。如果组是命令的,则作为命名的参数,否则作为位置参数。值以字符串的形式进行传递,不进行任何类型转换。
python中,命名正则表达式分组的语法
(?P<name>pattern)
其中,name是组的名字,pattern是正则表达式。
re_path(r"list/(?P<year>[0-9]{4})/(?P<month>[1-9]|1[0-2])/", views.project_list, name="list")
include
include可以接收一个表示导入路由模块的字符串,也可以接收一个路由模式列表。
可以由根路由的路径,产生include包含的路由
include(module, namespace=None)
include(pattern_list)
include((pattern_list, app_namespace), namespace=None)
url命名
path, re_path还有一个参数,name,这个参数可以给我们的url命一个名。
实际开发中,经常需要获取最终形式的url
反向解析:from django.shortcuts import reverse
projects:detail = app_name:url_name
projects:表示应用名,可以写,也可以不写
detail:url命名的名称 就是name的名称
reverse的kwargs和args不能同时使用, 使用args时会将第一个参数传递给第一形参
app_name
创建应用
python .manage.py startapp 应用名
在对应的urls.py文件下创建应用名