django的根urls分发子应用路由时,无法查找到子应用urls的路由

报错显示:
在这里插入图片描述
根urls.py

from django.contrib import admin
from django.urls import path, include
from rest_framework_jwt.views import obtain_jwt_token

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/',obtain_jwt_token),
    
    path(r"^",include("blog.urls")),
]

子应用blog下的urls.py

from django.urls import re_path
from blog_my.apps.blog import views

urlpatterns = [
    re_path(r"test/$",views.TestView.as_view(),name="test"),
]

问题原因:

好吧,是我大意了,以前没有怎么注意这几个函数的区别

url(route, view, kwargs=None, name=None)

path(route, view, kwargs=None, name=None)

re_path(route, view, kwargs=None, name=None)

注意

  • url是Django 1.x中的写法,在Django2.1中,开始舍弃Django1.x中的url写法,它可以在路径中使用正则。
  • path是2.x默认使用的,但是不可以使用正则!不可以使用正则!
  • re_path,可以使用正则。

所以,我在根urls.py中的path中使用了正则,因此无法匹配到子路由路径,把正则^去掉就可以了。
补充
既然path不可以使用正则,它也提供了类似正则的路径转换器,以补充通过正则获取参数的缺陷

str:匹配任何非空字符串,但不含斜杠/,如果你没有专门指定转换器,那么这个是默认使用的;

int:匹配0和正整数,返回一个int类型

slug:可理解为注释。该转换器匹配任何ASCII字符以及连接符和下划线,比如’ building-your-1st-django-site‘;

uuid:匹配一个uuid格式的对象。为了防止冲突,规定必须使用破折号,所有字母必须小写,例如’075194d3-6885-417e-a8a8-6c931e272f00‘ 。返回一个UUID对象;

path:匹配任何非空字符串,重点是可以包含路径分隔符’/‘。这个转换器可以帮助你匹配整个url而不是一段一段的url字符串。

实例

urlpatterns = [
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
    ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值