Raised by: django.contrib.admin.sites.catch_all_view The current path, xxx/xxx/, matched the last on

只能说,在django的开发中,这是笔者遇到的挺奇妙的错误。
在这里插入图片描述
如果你的项目主路由urls.py路径,只是一个空 ’ ’ 的路径,如下所示:

path('', admin.site.urls),

那么当你想要下载文件时,就会弹出这样的信息,一开始我还以为是我改动了源码,导致主路由内的其他路由,读取不到,后来反应过来了,原来是这个 admin.site.urls , 在搞事情。

#setting.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
#设置静态文件路径为主目录下的media文件夹
MEDIA_URL = '/download/'
#url映射

我的理解是这里的路由被截断了,其他的路由相当于是被忽略了,所以当我想要下载文件时,media 路由映射就一直报错,错误一直都是这个上面的这个错误,说是找不到该下载文件的路由,也就无法映射为文件下载路径,所以迟迟无法解决下载文件的问题,按道理之前我已经解决了下载文件的问题了,只要在主路由文件内添加下载文件的路由,如下:

方法1:

# 主路由表文件 urls.py

from outsource.settings import MEDIA_URL, MEDIA_ROOT
from django.conf.urls.static import static
from django.views.static import serve
urlpatterns = [
	path('test/', admin.site.urls),
    re_path(r'^download/(?P<path>.*)$', serve, {'document_root': MEDIA_ROOT}, name='下载文件'),  # 下载任意文件

]

要注意,如果 path 内的路由是空的,即 ' ' ,那么就有问题了,默认进入的是 admin.site.urls 的路由表内,django 的路由查找是惰性查找,找到了就停止并返回,不过这里一开始就被路由截断了,直接进入了 admin.site.urls,都不返回主路由表,重新查找路由的,所以只好配置内容给主路由,否则平时的路由查询,是没什么问题,但是要用到下载文件的功能,就会出问题,所以笔者的解决方法,就只能为主路由添加具体内容,而不是 空字符串 ' '

这里应该是有个判断逻辑,如果为空 ' ', 就会进行 admin.site.urls 路由表查询,否则就怎么样。

之前我的代码是这样的:之后下载文件时,就会报错,第一个path的路由配置了空字符串,所以报错,后来不配置空字符串时,就没问题。

报错时的代码逻辑:

# 主路由表文件 urls.py

from outsource.settings import MEDIA_URL, MEDIA_ROOT
from django.conf.urls.static import static
from django.views.static import serve
urlpatterns = [
	path('', admin.site.urls),
    re_path(r'^download/(?P<path>.*)$', serve, {'document_root': MEDIA_ROOT}, name='下载文件'),  # 下载任意文件

]

方法2:

# 主路由表文件 urls.py

from outsource.settings import MEDIA_URL, MEDIA_ROOT
from django.conf.urls.static import static
from django.views.static import serve
urlpatterns = [
    re_path(r'^download/(?P<path>.*)$', serve, {'document_root': MEDIA_ROOT}, name='下载文件'),  # 下载任意文件
	path('', admin.site.urls),
]

只要在进入 admin.site.urls 之前,提前找到下载的路由,就可以防止路由截断了,将想要被找到的路由,放在 admin.site.urls 路由之前就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值