Django form.errors未显示在模板中

Kev*_*dez 5 python forms django jinja2

我已刷新 stackoverflow页面,并尝试在html模板上显示我的表单错误。我做了:

    {% if form.error %}
    {% for field in form %}
        {% for error in field.errors %}
            <div class="alert alert-danger">
                <strong>{{ error|escape }}</strong>
            </div>
        {% endfor %}
    {% endfor %}
    {% for error in form.non_field_errors %}
        <div class="alert alert-danger">
            <strong>{{ error|escape }}</strong>
        </div>
    {% endfor %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

正如在stackoverflow问题中所说的,我也尝试简单地做:

{% if form.error %}
This should pop up if there is an error
{% endif %}
Run Code Online (Sandbox Code Playgroud)

无论如何,什么都没有发生:这是我的view.py代码:

    {% if form.error %}
    {% for field in form %}
        {% for error in field.errors %}
            <div class="alert alert-danger">
                <strong>{{ error|escape }}</strong>
            </div>
        {% endfor %}
    {% endfor %}
    {% for error in form.non_field_errors %}
        <div class="alert alert-danger">
            <strong>{{ error|escape }}</strong>
        </div>
    {% endfor %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

我能够将表单错误显示在django控制台上,但它拒绝显示在模板上。

将打印form.errors件打印到控制台:<li>password2<ul class="errorlist"><li>The two password fields didn&#39;t match.</li></ul></li></ul>

Lem*_*eur 7

forms.errors启动,但是最后,您form = UserCreationForm()在呈现视图之前声明了一个新表单。

在检查验证码是否form有效之后,所有验证错误都在form实例内部,记住进程按顺序运行,最后,销毁变量formform = UserCreationForm()因此不再有验证错误

您可以做的是,form = UserCreationForm()当您的请求方法GET保持表格为空时,将此新表格添加到else语句中。通过添加else语句,可以避免表单的新分配;在经过验证的过程,它会跳转到render(request,....)form包含所有实例验证错误

if request.method == 'POST':
    form = UserCreationForm(request.POST)
    if form.is_valid():
        form.save()
        username = form.cleaned_data.get('username')
        password = form.cleaned_data.get('password2')
        user = authenticate(username=username, password=password)
        login(request, user)
        return HttpResponseRedirect('/')
     else:
         print(form.errors)
else:
    form = UserCreationForm()
return render(request, 'registration/register.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)

注意,正确的号召形式错误模板是form.errors小号form.error

{% if form.error %}  {% if form.errors %}
Run Code Online (Sandbox Code Playgroud)

  • 传统上是的,但还有很多其他方法。当请求是 POST 时,你用 `request.POST` 创建一个表单,当它是 GET 时创建一个空表单 (2认同)