1.工作原理
django通过urlconf来映射视图函数,只区分路径,不区分http方法
- Django确定要使用的根URLconf模块,一般实在settings中的ROOT_URLCONF设置的值,但是如果传入HttpRequest对象具有一个urlconf属性(由中间件设置),则其值代替ROOT_RULCONF来设置
- Django加载该URLconf模块并查找变量urlpatterns,它是一个列表django.url.path() 和 / 或django.urls.re_path()实例。
- Django按顺序遍历每一个URL模式,并停在与URL匹配的第一个URL模式,需要特别注意编写的顺序
- 一旦某个URL模式匹配,Django就会导入并调用给定的视图,该视图是一个简单的Python函数(或基于类的视图方法)。该视图通过以下参数传递:
- 一个HttpRequest实例
- 如果匹配的URL模式没有返回任何命名组,则来自正则表达式的匹配作为位置参数提供
- 关键字参数由路径表达式匹配的任何命名部分组成,并由可选的kwargs参数传给django.url.path()或django.urls.re_path()
- 如果没有url模式匹配,或者在此过程中的任何点发生异常,Django将调用适当的错误处理视图
2.简单示例
给子路由添加前缀
在子级中编写路由地址
from django.urls import path,include
from first_app import views
urlpatterns = [
path('first_request/', views.my_first_request),
path('login_request/', views.login_request)
]
在父级中添加前缀,include查找url
from django.contrib import admin
from django.urls import path,include
from first_app import views
urlpatterns = [
path('admin/', admin.site.urls),
# path('first_request/', views.my_first_request),
# path('login_request/', views.login_request)
path('first_app/',include('first_app.urls'))
]