本人的django的版本是2.0.6
在django项目中,在urls.py文件中,匹配路由用的path方法,之前我用的都是url方法
写了一个path方法,使用正则表达式
from django.contrib import admin from django.urls import path from app1 import views urlpatterns = [ # path('admin/', admin.site.urls), path('test/', views.Test.as_view()), path('book/', views.Book_modelserializer_cbv.as_view()), path('book/(?P\d+)/', views.Book_Detail_modelserializer_cbv.as_view()), ]
但是我通过浏览器给django发送get请求,但是总是提示我匹配不到的视图函数
我的url的路径如下
http://127.0.0.1:8080/app1/book/1/
结果如下
Page not found (404) Request Method: GET Request URL: http://127.0.0.1:8080/app1/book/1/ Using the URLconf defined in cbv.urls, Django tried these URL patterns, in this order: admin/ app1/ test/ app1/ book/ app1/ book/(?P\d+)/ The current path, app1/book/1/, didn't match any of these.
感觉很奇怪,为什么我明明写了带正则表达式的url匹配项,但是为什么匹配不到呢?
查看django的文档,路径如下
https://docs.djangoproject.com/en/2.0/topics/http/urls/
发现django2.0版本还有个re_path的方法,这个方法才可以使用正则表达式
使用re_path方法,就可以使用正则表达式了,枉我学了这么多年的django了,惭愧惭愧
from django.contrib import admin from django.urls import path from app1 import views from django.urls import re_path urlpatterns = [ # path('admin/', admin.site.urls), path('test/', views.Test.as_view()), path('book/', views.Book_modelserializer_cbv.as_view()), re_path('book/(?P\d+)/', views.Book_Detail_modelserializer_cbv.as_view()), ]
这样就可以正常匹配到我们想要的url了