有名分组 无名分组

无名分组

无括号

当路由层如下时:

(注意:[0-9]{4}在0-9的数字中选择四个)

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^$', views.home),
    re_path(r'^wushen/[0-9]{4}/', views.wushen),
    re_path(r'^wushenadd/', views.wushenadd),
    re_path(r'', views.error)
]

视图函数为:

def wushen(request):
    return HttpResponse('wushen')

def wushenadd(request):
    return HttpResponse('wushenadd')

def home(request):
    return HttpResponse('这是主界面')

def error(request):
    return HttpResponse('404')

 

则会出现以下状况:

 

 因为它在匹配第一层路由时直接匹配到了最后一个,把最后一行删了可以避免这种状况。

 

有括号

re_path(r'^wushen/([0-9]{4})/', views.wushen)
会将加了括号的正则表达式匹配的内容当做位置参数传给后面的视图函数
此时的视图函数为
def wushen(request, model):
    print(model)
    return HttpResponse('wushen')

 

 

 



有名分组

此时的路由为(\d的意思是匹配数字,+是匹配一个或者多个):
re_path(r'^wushen/(?P<year>\d+)/', views.wushen),

会将加了括号的正则表达式匹配的内容当做关键字参数传递给后面的视图函数

关键字就是你尖括号里面的名字(year)

则此时的视图函数为:

def wushen(request, year):
    print(year)
    return HttpResponse('wushen')

 

 

注意:当有名和无名搭配使用时会报错

例如:此时的路由为:

re_path(r'^wushen/(?P<year>\d+)/(\d+)/', views.wushen)

视图函数为;

def wushen(request, year, a):
    print(year)
    print(a)
    return HttpResponse('wushen')

 

 

只能有名有名一起用或无名无名一起用

此时的路由为:

1. re_path(r'^wushen/(?P<year>\d+)/(?P<a>\d+)/', views.wushen),
2.re_path(r'^wushen/(\d+)/(\d+)/', views.wushen),

都可以正常运行

 

 

 



 

 

posted @ 2022-04-17 16:09  吴神  阅读(39)  评论(0)    收藏  举报