Django的urls.py中能否配置带问号参数的path路由路径?
Django urls.py 带查询参数路径写法问题解答
结论
你给出的写法是不可行的,具体原因和正确方案如下:
- 原因:Django路由系统中的
path()、re_path()方法仅匹配URL的路径部分,也就是?符号之前的内容,?之后的内容属于查询参数,不会被路由规则捕获匹配。如果你把?写在路由路径里,Django会将其识别为路径的普通字符,无法匹配到实际携带查询参数的请求。 - 正确处理方案分两种场景:
- 如果你就是要使用
?传递查询参数:
路由仅需要配置路径部分即可,代码为:
后续在对应的视图函数中,直接从path('article/', article.site.urls)request.GET中提取参数即可,示例代码:def your_view(request): date = request.GET.get('date') # 即可拿到url中?date=xxx的参数值 # 后续业务逻辑- 如果你希望参数直接作为路径的一部分而非查询参数:
可以使用Django自带的路径转换器语法,代码示例:
该写法可以匹配# 可根据实际参数类型替换str为int、slug等转换器 path('article/<str:date>/', article.site.urls)/article/20240601/这类路径,视图函数可以直接接收date作为入参使用。 - 如果你就是要使用
内容的提问来源于stack exchange,提问作者Filip
相关产品推荐
相关产品推荐

