为模板中的每个字段和模板中的每个正确数据显示django表单错误

为模板中的每个字段和模板中的每个正确数据显示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

我是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 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}}
(通常在表单的末尾或顶部)来呈现其他错误

文档对此主题非常清楚。请查看以了解更多信息