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

如何在Django的HTML模板及views.py中引用表单变量?

解决Django中无name属性表单的字段识别问题

嘿,这个问题的核心其实很明确——你的表单输入框缺少了name属性,这可是后端(包括Django)识别不同表单字段的唯一标识!没有它,request.POST里根本不会携带这些输入框的值,自然没法区分获取。下面给你一步步的解决方案:

第一步:给表单输入框添加name属性

首先修改你的HTML表单,给每个输入框加上对应的name属性,同时别忘了调整表单的action指向Django的视图函数(而不是静态HTML文件),还要加上Django必备的CSRF令牌(防止跨站请求伪造):

<div class="services_dark sj" id="signup">
 <div class="container">
 <h3 class="m_3"><center>Interested to join us?</center></h3>
 <div class="contact-form">
 <form method="post" action="{% url 'contact_post' %}">
 {% csrf_token %} <!-- 一定要加这个,否则Django会拒绝请求 -->
 <input type="text" class="textbox" name="first_name" value="First Name" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'First Name';}">
 <input type="text" class="textbox" name="last_name" value="Last Name" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Last Name';}">
 <input type="email" class="textbox" name="email" value="Email address" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Email address';}">
 <input type="submit" value="Join">
 </form>
 </div>
 </div>
 </div>

注意:{% url 'contact_post' %}里的contact_post是你在urls.py中给视图函数设置的名称,要确保和你的路由配置对应。

第二步:在views.py中通过name属性获取字段值

现在你就可以像之前处理title和content那样,用request.POST.get()来获取每个字段的值了:

from django.shortcuts import render, redirect
# 假设你有一个存储联系信息的模型
from .models import Contact

def contact_post(request):
    if request.method == 'POST':
        # 通过name属性获取对应输入框的值
        first_name = request.POST.get('first_name')
        last_name = request.POST.get('last_name')
        email = request.POST.get('email')
        
        # 将数据存入数据库(如果需要的话)
        if first_name and last_name and email:
            Contact.objects.create(
                first_name=first_name,
                last_name=last_name,
                email=email
            )
            # 处理完成后重定向到成功页面或当前页面
            return redirect('signup_success')
    
    # GET请求时返回表单页面
    return render(request, 'your_template.html')

额外优化:用HTML5占位符替代JS处理

你原来用onfocus和onblur处理占位文本的方式有点过时,HTML5的placeholder属性可以更简洁地实现相同效果,不用写JS代码:

<input type="text" class="textbox" name="first_name" placeholder="First Name">
<input type="text" class="textbox" name="last_name" placeholder="Last Name">
<input type="email" class="textbox" name="email" placeholder="Email address">

这样既简洁又符合现代HTML规范,用户体验也不会打折扣。

内容的提问来源于stack exchange,提问作者Binks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:51:55