如何在Django的同一模板中显示表单内容?附代码示例
没问题,这事儿其实挺简单的,咱们一步步来实现提交表单后在同一模板显示内容:
第一步:修改视图函数(views.py)
首先得让视图能处理表单的POST请求,取出提交的数据并传递给模板。更新你的contact视图如下:
from django.shortcuts import render from .forms import ContactForm def contact(request): submitted_sujet = None if request.method == 'POST': # 用POST数据实例化表单 form = ContactForm(request.POST) if form.is_valid(): # 获取验证后的干净数据 submitted_sujet = form.cleaned_data['sujet'] # (可选)如果需要保存到数据库,这里可以加相关逻辑 # (可选)重置表单,提交后清空输入框 form = ContactForm() else: # GET请求时,生成空表单 form = ContactForm() # 将表单和提交的数据传递给模板 return render(request, 'contact.html', { 'form': form, 'submitted_sujet': submitted_sujet })
第二步:更新模板文件(contact.html)
首先要补上Django表单必须的{% csrf_token %}(不然会触发403权限错误),然后添加一段逻辑,当有提交数据时显示出来:
<form id="myForm" action="{% url 'contact' %}" method="post"> {% csrf_token %} <!-- 这行一定要加! --> {{ form.sujet }} <button type="submit">提交</button> <!-- 补充提交按钮,用户才能提交表单 --> </form> <!-- 显示提交后的内容 --> {% if submitted_sujet %} <div class="submitted-content"> <h3>你提交的主题是:</h3> <p>{{ submitted_sujet }}</p> </div> {% endif %}
简单说明
- 当用户第一次访问页面时,是GET请求,
submitted_sujet为None,所以不会显示提交内容区域。 - 用户填写表单并提交后,视图处理POST请求,验证表单有效后把用户输入的
sujet内容赋值给submitted_sujet,再传递给模板。模板通过{% if submitted_sujet %}判断,就会渲染出提交的内容。 - 如果希望提交后保留表单里的输入内容,只需要删掉视图里的
form = ContactForm()这一行即可。
内容的提问来源于stack exchange,提问作者Ahlam AIS
相关产品推荐
相关产品推荐

