Django多HTML表单输入提交到视图时request.GET取值返回None问题
问题根因
获取表单值返回None是3处代码写法错误导致的:
- 表单标签
method配置为post,提交的表单数据存放在请求体中,request.GET仅能读取URL拼接的查询参数,无法获取POST提交的内容 - 所有输入框
<input>仅设置了id属性,未设置name属性:浏览器提交表单时,只会携带配置了name属性的输入项值,无name的字段会被直接丢弃,不会传给后端 - 视图中取参数的键写为
form_content,这是外层div的id值,和需要获取的first_name、last_name、email三个字段名完全不匹配 - 额外提醒:Django默认开启CSRF防护,POST表单未携带CSRF令牌时会直接返回403错误,无法正常提交
修正代码
HTML模板部分
给每个输入框添加和字段名对应的name属性,在表单内加入Django模板提供的CSRF令牌标签:
<div id="form_content"> <form action="" method="post"> {% csrf_token %} <section class="form_inputs"> <label for="first_name">First Name:</label> <input type="text" id="first_name" name="first_name"> </section> <section class="form_inputs"> <label for="last_name">Last Name:</label> <input type="text" id="last_name" name="last_name"> </section> <section class="form_inputs"> <label for="email">Email:</label> <input type="text" id="email" name="email"> </section> <input type="submit" value="Submit"> </form> </div>
视图函数部分
判断请求方法为POST时,从request.POST中按输入框的name属性值读取对应字段:
def home(request): if request.method == "POST": first_name = request.POST.get("first_name") last_name = request.POST.get("last_name") email = request.POST.get("email") # 此处可添加自定义业务逻辑,比如打印、数据存储等 print(first_name, last_name, email) context = {"title": "Home"} return render(request, "myApp/home.html", context)
修改完成后提交表单即可正常获取三个输入框的取值,不会再返回None。
内容的提问来源于stack exchange,提问作者logan_9997
相关产品推荐
相关产品推荐

