Django提交表单后ipsychcase_id丢失引发404错误的问题排查
以下是几种最可能导致该问题的原因:
AJAX请求未携带ipsychcase_id参数
提交表单的AJAX代码里没有把ipsychcase_id作为请求参数(不管是POST数据还是URL拼接参数)传给后端,导致视图生成跳转URL时拿不到这个ID,最终路径里出现空段,形成//的情况。先检查AJAX的data字段,确认是否包含该参数,或者请求URL是否正确拼接了ipsychcase_id。视图处理POST时未正确传递ID到跳转逻辑
如果ResultsView或者处理POST请求的视图需要用ipsychcase_id生成跳转URL,但代码里没有从POST数据、GET参数或者URL捕获组里正确提取这个ID,就会导致跳转URL缺失该值。比如URL规则是path('processed/<int:ipsychcase_id>/', ResultsView.as_view(), name='processed'),但视图里调用reverse时没传入这个ID参数。跳转时的URL反转参数缺失
视图处理完POST请求后使用redirect跳转,但reverse生成URL时没有传入ipsychcase_id的 kwargs 参数,比如写了reverse('processed')而不是reverse('processed', kwargs={'ipsychcase_id': case_id}),这种情况下Django无法填充URL里的参数占位符,就会生成缺失ID的路径。URL配置与反转参数不匹配
检查URL配置里的参数名称和reverse时传入的 kwargs 键名是否一致,比如URL里是<int:case_id>但反转时传的是ipsychcase_id,也会导致参数无法正确填充,出现空路径段。
内容的提问来源于stack exchange,提问作者RobMcC

