2010-07-13 5 views
0

Я использую стандартную форму аутентификации. Это чистый метод выглядит следующим образом:Странные сообщения об ошибках проверки

def clean(self): 
    username = self.cleaned_data.get('username') 
    password = self.cleaned_data.get('password') 

    if username and password: 
     self.user_cache = authenticate(username=username, password=password) 
     if self.user_cache is None: 
      raise forms.ValidationError(_("Please enter a correct username and password. Note that both fields are case-sensitive.")) 
     elif not self.user_cache.is_active: 
      raise forms.ValidationError(_("This account is inactive.")) 

    # TODO: determine whether this should move to its own method. 
    if self.request: 
     if not self.request.session.test_cookie_worked(): 
      raise forms.ValidationError(_("Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in.")) 

    return self.cleaned_data 

Моя Войти Форма:

<form method="post" action="{% url django.contrib.auth.views.login %}"> 
    <table> 
     {% if form.errors %} 
      <tr class="form-errors"> 
       <td> 
        <ol> 
         {% for error in form.errors %} 
          <li>{{ error }}</li> 
         {% endfor %} 
        </ol> 
       </td> 
      </tr> 
     {% endif %} 

Но вместо сообщений проверки я получаю:

, если имя пользователя и передача неверен или счет неактивен: " 1. __all__ "
если пароль не указан:" 1. password "
если имя пользователя не указано:" 1. username "
если оба не дает: "1. username 2. password"
никакого сообщения для некорректного имени пользователя

EDIT: Если изменить

   <td> 
        <ol> 
         {% for error in form.errors %} 
          <li>{{ error }}</li> 
         {% endfor %} 
        </ol> 
       </td> 

к:

{{form.errors}}

Получаю, то есть __all__ and beneath it "Account inactive". Как получить только сообщение? Любые идеи?

ответ

2

Попробуйте это. form.errors - словарь, поэтому, как и каждый словарь, вы можете читать ключ и значение. Key is field или __all__ ', а значение - это сообщение об ошибке, которое вы искали.

{% if form.errors %} 
<tr> 
    {% for k, v in form.errors.items %} 
    <td>{{k}}</td> 
    <td>{{v}}</td> 
    {% endfor %} 
</tr> 
{% endif %} 

EDIT

Если вы wan't выбрать определенные типы ошибок поля:

{% if form.errors %} 
    {% for k, v in form.errors.items %} 
     <tr> 
      {% ifequal k 'password' %} 
       <td>Password</td> 
       {% else %} 
        {% ifequal k 'username' %} 
         <td>Username</td> 
         {% else %} 
          <td>Other</td> 
      {% endifequal %}{% endifequal %}     
      <td>{{v}}</td> 
     </tr> 
    {% endfor %} 
{% endif %} 

или выберите '__all__' в ifequal.

+0

теперь должен выбрать только ошибки '__all__':/ – muntu

+0

отредактировал мой ответ – crivateos

Смежные вопросы