Пытается отобразить сообщение проверки django - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь отобразить встроенную Django ошибку проверки для моей формы входа в мой шаблон. Я не могу получить сообщение об ошибке, такое как «Имя пользователя и пароль не совпадают». Что я делаю неправильно? вот мой файл forms.py

from django import forms
from django.contrib.auth.forms import AuthenticationForm

class LoginForm(AuthenticationForm):
    username = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control', 'placeholder':'Username'}))
    password = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control', 'placeholder':'Password'}))
    botcatcher = forms.CharField(widget=forms.HiddenInput, required=False)

в моем проекте url.py

urlpatterns = [
    path('login/', auth_views.LoginView.as_view(template_name='frontend/login.html', form_class=LoginForm), name='login'),
    path('logout/', auth_views.LogoutView.as_view(template_name='frontend/logout.html')),
    # path('backend/', include('backend.urls')),
    path('mrc/', include('frontend.urls')),
    path('admin/', admin.site.urls),
]

при входе в систему. html

{% for my_field in form.visible_fields %}
                      <!-- THIS IS FOR ERROR IN THE FORM -->
                        {% if my_field.errors %}
                            {% for err in my_field.errors %}
                            <div class="alert alert-danger">{{ err }}</div>
                            {% endfor %}
                        {% endif %}
                       <!-- THIS IS FOR THE FIELDS -->
                        <div class="form-group">
                          {{ my_field.label_tag }}
                          {{ my_field }}

                        </div>
                        <!-- END THE FIELDS -->
{% endfor %}

Ответы [ 2 ]

0 голосов
/ 13 января 2020

LoginView не содержит никаких специфических c сообщений об ошибках, связанных с полем, только два сообщения об ошибках, не связанных с полями, для:

  • неверный логин и
  • неактивный пользователь.

Вы можете отобразить эти ошибки следующим образом:

{% for error in form.non_field_errors %}
    {{ error }}
{% endfor %}
0 голосов
/ 13 января 2020

Вы проверяете на наличие ошибок в указанных полях c, вместо проверки всей формы на наличие ошибок, попробуйте проверить всю форму.

Вы можете сохранить обычное поле logi c, но попробуйте выполнить отдельную проверку, чтобы что-то вроде ...

{% if form.errors %}
    {% for field in form %}
       {% for error in field.errors %}
            <div class="alert alert-danger">
                <strong>{{ error|escape }}</strong>
            </div>
       {% endfor%}
    {% endfor %}
{% endif %}

По сути, форма сама содержит ошибки, а не поле. Так что ваше утверждение if никогда не будет верным даже при наличии ошибок в форме.

...