1.什么是路由层
简单来说,就是通过路由层中的path函数,告诉django遇到那个url,执行那个视图函数
2.路由层的请求流程
- 1.客户在浏览器输入网址→请求进入django的setting.py中的ROOT_URLCONF寻找指定使用的urls.py文件位置(如果中间件有路由功能,urls文件功能会被其替代)
- 2.Django会先匹配项目目录下的path路径然后在匹配应用里面的url路径,从上至下查找url匹配,一旦匹配成功,停止查找。
- 3.一旦匹配url成功后,路由层向视图层传递下列参数:
- 1)一个HttpRequest实例,即request
- 2)如果url中的可变参数没有命名,那么就按照位置来与视图函数中的形参一一对应,如果有则按关键字方式传参
- 4.如果匹配不到url,Django会发出异常
- re_path(r'^test/$',views.test)
- 注意:path路径匹配是会自动在url后面加上一个斜杠,即先匹配test没有找到,会自动加个/在匹配一次!
- 如何取消自动加斜杠?
- 在setting.py里添加APPEND_SLASH = False 默认是True
复制代码 3.路由层的格式和参数说明
3.1有名分组和无名分组
分组:就是给某一段正则表达式用小括号扩起来- 无名分组:就是将括号内的正则表达式匹配到的内容当做位置参数传递给后面的视图函数
- from django.urls import path, re_path
- re_path(r'^test/(\d+)/',views.test)
- def test(request,xx): # xx这个参数就是对应path里面的(\d+)
- pass
复制代码- 有名分组:可以给正则表达式起个别名
- from django.urls import path, re_path
- re_path(r‘^(?P<自定义参数名>正则表达式)/$',view.xxx,name),
- def test(request,自定义参数名):
- pass
复制代码 有名无名不能混用!单个分组可以使用多次!
3.2url反向解析
- 反向解析的步骤:
- # 1.先给改url起一个别名
- re_path(r'^test/$',views.test,name='ooo')
- # 2.后端反向解析(视图层)
- 先导入reverse
- from django.shortcuts import reverse
- print(reverse(‘ooo’)) # 得到的就是对应别名的url
- # 3.前端反向解析
- 在需要url的地方,改成如下格式:
- <a target="_blank" href='https://www.cnblogs.com/{% url 'ooo' %}'>111</a>
复制代码 3.3有名无名的反向解析
[code]1.无名分组后端部分:先导入reversefrom django.shortcuts import reverseprint(reverse(‘ooo’),args=(1,))#需要传一个对应参数args,里面的1可以配正则表达式匹配到前端部分:111# 123是匹配到url的正则表达式2.有名分组其实是和无名分组一样的,但是也可以写成关键字方式传参print(reverse(‘ooo’),kwargs={‘year’:1111})) |