为模板中的每个字段和模板中的每个正确数据显示django表单错误
我是django的新手,我正在尝试验证表单数据,如果发生任何错误,请使用旧值将数据传输到模板页面,以显示在表单中。如果可能的话,我想要字典中每个数据的错误消息 views.py为模板中的每个字段和模板中的每个正确数据显示django表单错误,django,django-forms,django-templates,Django,Django Forms,Django Templates,我是django的新手,我正在尝试验证表单数据,如果发生任何错误,请使用旧值将数据传输到模板页面,以显示在表单中。如果可能的话,我想要字典中每个数据的错误消息 views.py from django.shortcuts import render from .forms import RegForm # Create your views here. def login(request): return render(request, 'login.html') def reg
from django.shortcuts import render
from .forms import RegForm
# Create your views here.
def login(request):
return render(request, 'login.html')
def registration(request):
if request.method == 'POST':
form = RegForm(request.POST)
if form.is_valid():
print "Form is valid"
print form.cleaned_data
user_data = {
'firstname':form.cleaned_data['firstname'],
'lastname':form.cleaned_data['secondname'],
'username': form.cleaned_data['username'],
'mail':form.cleaned_data['mail'],
'password': form.cleaned_data['password']}
print user_data
else:
print "Form is not valid"
print form['mail'].errors
return render(request, 'register.html')
forms.py
from django import forms
class RegForm(forms.Form):
firstname = forms.CharField(max_length=100)
secondname = forms.CharField(max_length=100)
username = forms.CharField(max_length=100, min_length=8)
mail = forms.EmailField()
password = forms.CharField(widget = forms.PasswordInput(), min_length=8, max_length=100)
register.html
<!DOCTYPE html>
<html>
<head>
<title>registration</title>
<style type="text/css">
header{
width: 100%;
display: block;
}
section{
width: 180px;
margin: auto;
display: block;
}
nav{
width: 180px;
float: right;
display: block;
}
</style>
</head>
<body>
<header>
<nav>
<a href="{% url 'registration' %}">Registration</a>
<a href="{% url 'login' %}">Login</a>
</nav>
</header>
<section>
<h1 align="center">Register:</h1>
<form method = "post" action = "{% url 'registration' %}">
{% csrf_token %}
<label>First Name:</label><br>
<input type="text" name="firstname"><br>
<label>Second Name:</label><br>
<input type="text" name="secondname"><br>
<label>Mail Id:</label><br>
<input type="text" name="mail"><br>
<label>User Name:</label><br>
<input type="text" name="username" value=""><br>
<label>Password:</label><br>
<input type="password" name="password"><br><br>
<input type="submit" name="submit" value="submit">
</form>
</section>
</body>
</html>
登记
标题{
宽度:100%;
显示:块;
}
部分{
宽度:180px;
保证金:自动;
显示:块;
}
导航{
宽度:180px;
浮动:对;
显示:块;
}
登记册:
{%csrf_令牌%}
名字:
第二个名字:
邮件Id:
用户名:
密码:
从视图.py
将表单对象传递给模板
...
return render(request, 'register.html', { 'form': form })
...
现在,在模板中,可以使用对象表单
进行渲染。
例如,对于您的名字
字段:
...
<label>First Name:</label><br>
<input type="text" name="firstname"><br>
...
。。。
名字:
...
您应该这样做:
...
<label for="{{ form.firstname.id_for_label }}">First Name:</label>
{{ form.firstname }}
{{ form.firstname.errors }}
...
。。。
名字:
{{form.firstname}
{{form.firstname.errors}
...
{{form.firstname}
呈现html输入标记,而{{form.firstname.errors}
呈现此字段的错误
最后,您还可以使用模板标记{{form.non_field_errors}}
(通常在表单的末尾或顶部)来呈现其他错误
文档对此主题非常清楚。请查看以了解更多信息