如何在同一HTML页面中单独显示Django表单提交的用户字段值
问题
我希望在同一HTML页面中显示用户提交的表单值,目前已实现显示功能,但内容为Python字典格式(示例:{'first_name': 'Tom', 'last_name': 'Hanks'}),请问如何单独显示名字(First Name)和姓氏(Last Name)?
以下是我的views.py代码:
from django.shortcuts import render from django import forms class DbNames(forms.Form): first_name = forms.CharField(label="First Name") last_name = forms.CharField(label="Last Name") def index(request): return render(request, "emp/index.html") def form_gen(request): form = DbNames() if request.method == "POST": form = DbNames(request.POST) if form.is_valid(): return render(request, "emp/users.html", { "form_data": form.cleaned_data }) else: print('ERROR') return render(request, "emp/users.html", { "result": form })
解决方案
嘿,这个问题很好解决,核心就是要学会在Django模板里直接访问字典的键值对!
form.cleaned_data本质就是一个标准的Python字典,你不需要把整个字典直接输出,而是可以在emp/users.html模板里单独提取每个字段的值:
模板修改示例
把你之前输出整个form_data的代码,替换成下面这样:
{% if form_data %} <h2>用户提交的信息</h2> <p><strong>First Name:</strong> {{ form_data.first_name }}</p> <p><strong>Last Name:</strong> {{ form_data.last_name }}</p> {% endif %} {% if result %} <!-- 保留你原来的表单渲染逻辑,比如: --> <form method="POST"> {% csrf_token %} {{ result.as_p }} <button type="submit">提交</button> </form> {% endif %}
这样就能分别展示名字和姓氏,不会再出现字典格式的输出了。
可选:视图层优化(非必需)
如果你想在视图里就把字段单独传给模板,也可以修改form_gen里的返回逻辑:
if form.is_valid(): cleaned_data = form.cleaned_data return render(request, "emp/users.html", { "first_name": cleaned_data['first_name'], "last_name": cleaned_data['last_name'] })
之后在模板里直接用{{ first_name }}和{{ last_name }}即可。不过这种方式灵活性稍差,后续如果新增表单字段,还要同步修改视图代码,所以更推荐第一种模板直接取值的方式。
内容的提问来源于stack exchange,提问作者fisherman
相关产品推荐
相关产品推荐

