You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django URL如何接收含斜杠的长字符串参数?

解决Django路由中带斜杠的字符串参数匹配问题

这个问题我之前踩过坑,核心原因很明确:Django默认的str路径转换器不会匹配包含斜杠/的内容——它只能匹配到第一个斜杠之前的部分。所以当你请求/api/v1/store/download/asdasd2asdsadas/asdasd时,Django会把asdasd2asdsadas当作ix参数,剩下的/asdasd找不到对应的路由规则,直接返回404了。

下面给你两种靠谱的解决方法:

方法一:使用path转换器(推荐)

Django提供了专门的path转换器,它可以匹配除问号?和哈希#之外的所有字符,完美支持带斜杠的长字符串参数。只需要把路由里的<str:ix>改成<path:ix>就行:

path('api/v1/store/download/<path:ix>/', DownloadVideoAPI.as_view(), name='download')

这个方法是Django 2.0+官方推荐的写法,简洁又安全,优先用这个。

方法二:使用正则路由(re_path)

如果你习惯用正则表达式来定义路由,可以用re_path(也就是旧版本的url函数),通过正则分组来匹配任意字符:

from django.urls import re_path

re_path(r'^api/v1/store/download/(?P<ix>.*)/$', DownloadVideoAPI.as_view(), name='download')

这里的(?P<ix>.*)会匹配从download/之后到末尾斜杠的所有内容,包括斜杠。如果你的URL可能不带末尾斜杠,可以把正则改成r'^api/v1/store/download/(?P<ix>.*)/?$',这样带不带斜杠都能匹配。

额外提醒

不管用哪种方法,都要注意参数的安全性:因为ix可能包含路径相关的字符,一定要在视图里做校验,比如限制参数只能是合法的资源标识,避免用户传入类似../../../../etc/passwd这种恶意路径导致安全问题。

内容的提问来源于stack exchange,提问作者jicke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:20:15