因为视图函数也是普通的Python函数,所以,除了Django规定的第一个HttpRequest参数之外,还可以定义额外的参数。那么对视图函数的其他参数进行传参就需要使用到动态路由的感念了,即URL不是固定的,在URL中包括了传递给视图的参数变量。
使用path配置动态路由
path方法定义于django/urls/conf.py文件中,在使用之前需要先导入。
配置动态路由也需要用到path函数,只是URL配置的语法上有些不同。如:
path('App/<int:a1>/'views.fn)
path中定义的类似<int:year>规则会捕获到URL中的值,映射到视图中的同名参数year,并根据指定的转换器将参数值转换为对应的类型,这里对应int(大于等于0的数)。之所以需要定义转换器,有两个原因:第一是可以将捕获到的字符值转换为对应的类型;第二是对URL中传值的一种限制,避免视图处理出错。
除了int之外,Django还提供了其他的转换器。
- str:匹配除了“/”(路径分隔符)之外的非空字符串,它是默认的转换器,即如果没有指定转换器,例如<day>,那么,相当于<str:day>。
- slug:匹配字母、数字、连字符和下画线组成的字符串。
- uuid:匹配格式化的UUID(通用唯一识别码),并将捕获到的参数值转换为UUID实例对象。
- path:匹配任意的非空字符串,包含了路径分隔符。
正则表达式
匹配URL中,同样也支持使用正则表达式进行匹配。这个时候则需要导入re_path方法,定义于django/urls/conf.py文件中。
Python的正则表达式中命名分组的语法为:(?P<name>pattern),其中name是分组名,pattern是匹配模式。引用分组可以使用分组名,也可以使用分组编号。如:
re_path('user/(?P<a1>[0-9]+)/', views.re)
匹配模式与正则表达式的写法一样,可以查看下面链接
正则表达式_HHYZBC的博客-CSDN博客https://blog.csdn.net/HHYZBC/article/details/124428612使用re_path的理由是path方法和转换器都不能满足需求。比如对URL中的某个数字或者字母个个数有特别要求时,