【问题标题】:Struggling to display django validation message努力显示 django 验证消息
【发布时间】:2020-01-13 20:11:07
【问题描述】:

我试图在我的模板上为我的登录表单显示一个内置的 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),
]

在 login.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 %}

【问题讨论】:

    标签: django validation django-forms


    【解决方案1】:

    LoginView 没有任何特定字段相关的错误消息,只有两个非字段错误消息:

    • 无效登录和
    • 非活动用户。

    您可以像这样呈现这些错误:

    {% for error in form.non_field_errors %}
        {{ error }}
    {% endfor %}
    

    【讨论】:

    • 非常感谢您的回复,它有效!
    【解决方案2】:

    您正在检查特定字段的错误,而不是检查整个表单是否有错误,请尝试检查整个表单。

    您可以保留常规字段逻辑,但尝试进行单独检查,例如...

    {% 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 语句也永远不会为真。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-30
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多