我使用 django allauth 进行用户注册和登录。我在模板中使用{{ form.has_errors }}
来显示错误,但错误未显示在模板中。可能是什么原因导致模板中没有显示错误?
来自allauth login.html(account/login.html)
{% block content %}
<div class="login-box">
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-6 col-md-offset-3 login-area">
<span class="error">
{% if form.has_errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}
</span>
<div class="panel panel-default">
<div class="panel-heading login-header">{% trans "Sign In" %}</div>
<div class="panel-body">
<form class="login" method="POST" action="{% url 'account_login' %}">
{% csrf_token %}
<div class="form-group form-group-lg">
<label for="emailAddress">Email address</label>
<input type="email" class="form-control" id="emailAddress id_login" name="login" placeholder="Email">
</div>
<div class="form-group form-group-lg">
<label for="password">Password</label>
<input type="password" class="form-control" id="password id_password" name="password" placeholder="Password">
</div>
<div class="form-group">
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
{% endif %}
</div>
<button class="btn-block signin-btn btn-sm btn-primary pull-right m-t-n-xs" type="submit">{% trans "Sign In" %}</button>
</form>
</div>
<div class="panel-footer">
<a class="button secondaryAction" href="{% url 'account_reset_password' %}">{% trans "Forgot Password?" %}</a>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
答案 0 :(得分:1)
似乎是对has_error
的误解他的方法返回一个布尔值,指定一个字段是否有错误 带有特定的错误代码。如果代码为None,则返回True 该字段包含任何错误。
再加上您手动渲染表单的事实。通常有两种类型的表单错误,非字段错误和与每个字段关联的错误(当它们的验证失败时)。上述方法接受字段名称作为参数,如果字段验证失败,则返回true。
您有多种选择,包括继续使用当前的方法,但要检查form.errors而不是form.has_error
,或单独显示每个字段的错误。
答案 1 :(得分:1)
试试这个。未附加到字段的表单引发的错误存储在non_field_errors
中 {% if form.non_field_errors %}
<ul class='form-errors'>
{% for error in form.non_field_errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
或者如果你想以自己的方式展示,请试试这个
{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}