根路由:
- 在django中,路由不能以/开头,且最好以/结尾
- 在根路由中添加子路由用include()
from django.contrib import admin
from django.urls import path, include
from App01 import views
urlpatterns = [
path('admin/', admin.site.urls),
#在根路由中包含子路由
#不能由/开头,最好以/结尾
path('user/', include('App01.urls')),
]
子路由:
- path第三个参数name是路由的名称,与试图函数参数无关
- 试图函数中的参数必须和路由中的参数名称一致 可以多个路由对应一个视图函数,注意里面的name最好不相同,以及视图函数里面的参数因为path()的类型不同需要有默认值
- path 的第一个参数的类型有int ,string, slug, path。其中string是默认参数类型
from django.urls import path, re_path
from App01 import views
#路由列表,名称urlpatterns 不能改
urlpatterns = [
#path第三个参数name是路由的名称,与试图函数参数无关
#首页
path('', views.index, name='home'),
#试图函数中的参数必须和路由中的参数名称一致
#可以多个路由对应一个视图函数,注意里面的name最好不相同,以及视图函数里面的参数因为path()的类型不同需要有默认值
#int,str,
path('show/<int:age>/', views.show, name='show'),
#string,不用加类型,因为string是默认参数类型
path('change/<name>/', views.change_name, name='change'),
#slug
path('list/<slug:name>/', views.list_user, name='list'),
#path,如果由多个参数,path类型必须是最后一个
path('access/<path:path>/', views.access, name='path'),
#正则
#re_path 和path 最大区别是正则模式串
re_path(r'^tel/(\d{9})/$', views.get_phone, name='phone'),
#正则命名组中参数名必须一致, get_tel函数中参数必须为 tel
re_path(r'^tell/(?P<tel>\d{9})/$', views.get_tel, name='tel'),
]