2016-09-19 33 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 %} 

かに格納されていますが、この1

{% if form.errors %} 
      <p>Your username and password didn't match. Please try again.</p> 
{% endif %} 
を試してみてくださいあなたの方法で表示する場合
1

から

コードは、フィールドが特定のエラーコードとエラー を有するかどうかを示すブール指示を返すhas_error

彼の方法を誤解しているように見えます。 codeがNoneの場合、 フィールドにエラーがあるとTrueを返します。

フォームを手動でレンダリングするという事実と相まって、一般にフォームエラーには2つのタイプがあり、非フィールドエラーと各フィールドに関連するエラー(検証に失敗した場合)があります。上記のメソッドは、フィールド名をパラメータとして受け取り、フィールドの検証に失敗した場合はtrueを返します。

現行の方法をそのまま使用して、form.has_errorの代わりにform.errorsをチェックするか、各フィールドに別々にエラーを表示するなど、いくつかの選択肢があります。

関連する問題