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

Django2中如何传递含斜杠的URL参数?

解决Django URL中传递带斜杠参数的问题

这个问题我之前也碰到过,Django默认的路径规则确实不支持直接传递带斜杠的参数,下面给你两个实用的解决方案:

方法一:使用re_path(正则URL模式)

Django的path()方法里默认的str转换器只会匹配不包含斜杠的字符串,所以我们可以改用re_path()(也就是旧版本的url()),通过正则表达式来匹配包含斜杠的参数。

修改你的urls.py如下:

from django.urls import re_path
from . import views

urlpatterns = [
    # 使用正则匹配任意字符(包括斜杠),直到结尾的/
    re_path(r'^test/(?P<test_arg>.*)/$', views.test, name='test'),
]

这样访问mysite.com/test/test1/test2就能正常匹配到test视图,test_arg参数的值就是test1/test2。

⚠️ 注意:如果你的URLpatterns里还有其他以test/开头的规则,建议把这个正则规则放在最后,避免它优先匹配导致其他URL失效。如果参数格式固定(比如只有两段),也可以把正则写得更精确,比如r'^test/(?P<test_arg>[^/]+/[^/]+)/$',这样只会匹配两段带斜杠的参数。

方法二:自定义路径转换器

如果更习惯用path()的写法,我们可以自定义一个支持斜杠的路径转换器,这样代码会更优雅。

  1. 在你的app目录下创建converters.py文件,编写转换器类:
class SlashConverter:
    # 正则规则:匹配任意字符(包括斜杠)
    regex = '.*'

    def to_python(self, value):
        # 将URL中的字符串转换为Python对象,这里直接返回原字符串即可
        return value

    def to_url(self, value):
        # 反向生成URL时,将Python对象转换为URL字符串,同样直接返回
        return value
  1. 在app的urls.py中注册并使用这个转换器:
from django.urls import path, register_converter
from . import converters, views

# 注册自定义转换器,命名为slash_str
register_converter(converters.SlashConverter, 'slash_str')

urlpatterns = [
    # 使用自定义的slash_str转换器
    path('test/<slash_str:test_arg>/', views.test, name='test'),
]

现在访问mysite.com/test/test1/test2就能正常匹配,test_arg参数会正确接收test1/test2。

关于URL编码的%2F

你尝试的mysite.com/test/test1%2Ftest2之所以失败,是因为WSGI服务器会自动把URL编码的%2F解码成斜杠,导致路径被拆分成test1和test2,依然匹配不上原有的path规则。上面的两种方法已经可以直接处理带斜杠的参数,不需要依赖URL编码,所以更推荐使用这两种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:26:06