2016-09-19 88 views
0

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

回答

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 %} 
1

似乎是has_error

他的方法的誤解返回一個布爾指定一個字段是否具有與特定的錯誤代碼的錯誤 。如果代碼爲None,則該字段將返回True,如果 該字段包含任何錯誤。

再加上你手動渲染表單的事實。通常有兩種類型的表單錯誤,非字段錯誤和與每個字段相關的錯誤(當它們的驗證失敗時)。上述方法接受一個字段名稱作爲參數,如果該字段驗證失敗,則返回true。

您有幾種選擇,包括繼續使用當前的方法,但檢查form.errors而不是form.has_error或單獨顯示每個字段的錯誤。