骄傲的赛亚人

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文件下创建应用名

 

posted on 2022-02-22 14:59  骄傲的赛亚人  阅读(34)  评论(0编辑  收藏  举报

导航