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 }}
模板标签呈现 form 和 fields 以及 field.errors 和 field.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 属性的一个表单
希望您对这个回答满意
我正在使用 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 }}
模板标签呈现 form 和 fields 以及 field.errors 和 field.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 属性的一个表单 希望您对这个回答满意