Django提交POST表单后返回空白页 如何正确获取表单参数值
Django POST表单提交空白、无法获取下拉框参数修复方案
问题根因
三个写法错误直接导致当前异常:
- 参数获取对象错误:前端表单明确配置
method="post",提交的表单参数存储在POST请求体中,现有视图代码使用self.request.GET.get()取值,完全无法获取到提交的年份参数 - 重定向逻辑错误:
HttpResponseRedirect方法需要传入可访问的实际路径,现有代码直接传入路由别名fdm:outstanding_reports,Django不会自动执行反向解析,会将该字符串识别为相对路径匹配,路由匹配失败就会返回空白响应,同时该跳转目标和你预期返回原reports表单页的需求也不匹配 - 前端提交按钮绑定了
onclick="test()"事件,如果该JS函数不存在、或函数内没有正确处理表单提交逻辑,会直接阻断默认表单提交流程
具体修复代码
1. 调整视图层逻辑
将原有POST分支代码替换为如下内容:
from django.shortcuts import HttpResponseRedirect from django.urls import reverse # 类视图POST分支 if self.request.method == 'POST': # 从POST对象中获取下拉框参数,可根据业务需求转成整数类型 year_one = self.request.POST.get('year_one') year_two = self.request.POST.get('year_two') # 此处可添加自定义业务逻辑,比如参数校验、根据年份筛选数据、把参数存入session等 # 通过reverse反向解析app:reports的实际路由,提交后跳转回原表单页 return HttpResponseRedirect(reverse('app:reports'))
如果是函数视图,把代码里的self.去掉,直接调用request.POST.get()、request相关方法即可
2. 前端表单排查调整
- 如果按钮绑定的
test()函数没有特殊业务作用,直接删除按钮上的onclick="test()"属性,避免JS报错阻断提交 - 确认两个下拉框的
name属性值和视图层取值的key完全一致,不要出现拼写错误 - 保留表单内的
{% csrf_token %}标签,避免POST请求被Django的CSRF防护拦截返回403错误
验证标准
- 点击提交按钮后页面正常跳转回reports表单页,无空白响应
- 视图层可以正常获取到
year_one、year_two两个下拉框选中的年份值,可直接用于后续数据查询、统计逻辑
内容的提问来源于stack exchange,提问作者edche
相关产品推荐
相关产品推荐

