Django访问带查询参数的personalities接口报404,urls.py路径不匹配如何解决
问题原因
你的404报错是路由匹配规则和访问地址不匹配导致的,核心是混淆了路径参数和查询参数的用法:
- 你通过
re_path('(?P<fio>.+)/$', ...)定义的是路径参数规则,要求/api/v1/personalities/之后必须跟非空的路径片段(比如/api/v1/personalities/ti/)才能匹配成功 - Django路由匹配只会判断
?之前的路径部分,不会把?后的查询参数纳入匹配逻辑。你访问的地址http://127.0.0.1:8000/api/v1/personalities/?fio=ti的路径部分到personalities/就结束了,没有后续路径片段匹配子路由规则,自然触发404。
另外你对DRF过滤的用法有误解:DRF的django_filters过滤默认读取的是?后的查询参数,根本不需要在路由层定义参数匹配规则。
解决方案
根据你的使用需求二选一即可:
方案1:沿用查询参数传参(符合DRF过滤的标准用法)
直接修改personalities.urls.py的配置,删除多余的路径参数规则:
path('', PersonalitiesFilterView.as_view())
后续直接在视图层配置django_filters的过滤字段,即可正常读取?fio=ti的参数值完成过滤。
方案2:保留路径参数规则
调整你的访问地址,把fio参数值放到路径部分:http://127.0.0.1:8000/api/v1/personalities/ti/
内容的提问来源于stack exchange,提问作者Saloss
相关产品推荐
相关产品推荐

