Django-messages 仅在使用 form|crispy 时有效,在其他情况下无效

Django-messages works only when form|crispy is used but not in other cases

我正在使用 django 创建登录页面,但当我输入错误的密码或电子邮件地址时,它没有显示任何消息。我也检查了其他消息,但没有帮助。

login.html

    <div class="right">
        <h2>Login</h2>

        {% if messages %}
            {% for message in messages %}
              <div class="alert alert-{{ message.tags }}">
                  {{ message }}
              </div>
            {% endfor %}
        {% endif %}
    
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <div class="field">
                    <div class="label">Email or Username</div>
                    <input type="text" name="username" id="username" class="form-control">
                </div>
                <div class="field">
                    <div class="label">Password</div>
                    <input type="password" name="password" id="password" class="form-control">
                </div>
                <button class="login" type="submit">LOGIN</button>
            </fieldset>
        </form>
        <div class="sign_up">
            <small>Don’t have an account yet?</small>
            <a class="signup" href="{% url 'register' %}">SIGN UP</a>
        </div>
    </div>

urls.py 有登录页面的这个路径(我已经导入了所有必要的 类):

path('login/', auth_views.LoginView.as_view(template_name='users/login.html') , name='login'),

但是当我在 login.html

中使用此 form|crispy 时会显示消息
        <div class="content-section">
            <form method="POST">
                {% csrf_token %}
                <fieldset class="form-group">
                    <legend class="border-bottom mb-4">Login</legend>
                    {{ form|crispy }}
                </fieldset>
                <div class="form-group">
                    <button class="btn btn-outline-info" type="submit">Sign In</button>
                </div>
            </form>
            <div class="border-top pt-3">
                <small class="muted-text">
                    Want a new Account? <a class="ml-1" href="{% url 'register' %}">Sign Up</a>
                </small>
            </div>
        </div>

在这里你使用了 LoginView 并且它会 return 它会显示 error 因为 {{ form|crispy }}模板标签呈现 formfields 以及 field.errorsfield.non_field_error.

这就是为什么如果您删除代码中的 message 块,您会收到一条错误消息,它会向您显示一个错误,即登录视图中的表单和消息没有关联

如果你想用 CSS 渲染你的 HTML 表单,你需要明确定义 errors showing block like this

 <div class="right">
        <h2>Login</h2>

       {% if form.errors %}

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

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

        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <div class="field">
                    <div class="label">Email or Username</div>
                    <input type="text" name="username" id="username" class="form-control">
                </div>
                <div class="field">
                    <div class="label">Password</div>
                    <input type="password" name="password" id="password" class="form-control">
                </div>
                <button class="login" type="submit">LOGIN</button>
            </fieldset>
        </form>
        <div class="sign_up">
            <small>Don’t have an account yet?</small>
            <a class="signup" href="{% url 'register' %}">SIGN UP</a>
        </div>
    </div>

这里不是指使用Django的消息框架。 Form it self return error in his errors 属性的一个表单 希望您对这个回答满意