You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:42:07