Django URL路由如何捕获包含多个正斜杠的字符串参数
解决方案
Django内置的str路径转换器默认不匹配路径分隔符/,所以ID中包含斜杠时会出现路径匹配失败的问题,你可以选择以下两种方案调整:
方法一:使用内置path转换器(最简单方案)
直接修改urls.py中的路径配置,将<str:id>替换为<path:id>即可,path转换器的作用就是匹配包含斜杠的任意非空字符串,完全适配你的需求。
修改后的urls.py示例:
from django.urls import path from. import views app_name ='graduates' urlpatterns = [ # 其他原有路由保持不变 path('status_detail/<path:id>/', views.status_detail, name='status_detail'), ]
修改后views.py和模板中的{% url %}调用代码不需要做任何调整,即可正常传递A/ur4040/09这类带斜杠的ID参数。
方法二:自定义转换器(更精确的匹配规则)
如果你需要严格限制ID的格式,避免匹配到不符合规则的过长路径,可以自定义专属的路径转换器,操作步骤如下:
- 在你的app目录下新建
converters.py文件,写入如下代码:
class GraduateIdConverter: # 正则匹配你给出的A/ur4040/09这类固定格式 regex = r'[A-Z]/ur\d{4}/\d{2}' def to_python(self, value): return value def to_url(self, value): return value
- 在
urls.py中注册自定义转换器并使用:
from django.urls import path, register_converter from. import views from.converters import GraduateIdConverter # 注册自定义转换器 register_converter(GraduateIdConverter, 'graduate_id') app_name ='graduates' urlpatterns = [ # 其他原有路由保持不变 path('status_detail/<graduate_id:id>/', views.status_detail, name='status_detail'), ]
该方案只会匹配符合指定格式的ID路径,安全性和准确性更高。
内容的提问来源于stack exchange,提问作者redoc
相关产品推荐
相关产品推荐

