错误未显示在模板中

时间:2016-09-19 04:48:21

标签: python django django-templates django-allauth django-1.9

我使用 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 %}

2 个答案:

答案 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 %}