Django2.0版本的path方法无法使用正则表达式的解决办法

Posted bainianminguo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django2.0版本的path方法无法使用正则表达式的解决办法相关的知识,希望对你有一定的参考价值。

本人的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<id>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<id>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<id>d+)/‘, views.Book_Detail_modelserializer_cbv.as_view()),
]

 

这样就可以正常匹配到我们想要的url了

 

以上是关于Django2.0版本的path方法无法使用正则表达式的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

django2.0 path使用方法

django2.0关于path匹配路径页面刷新不出来的问题

Django2.0路由补充之path,re_path及视图层

Django2.0中得url路由path得用法

Django 2.0 的路由如何实现正则表达式

django2.0和3.0的区别