【发布时间】:2019-06-09 01:10:35
【问题描述】:
我正在使用 django 消息系统来显示敬酒消息。我试图阻止用户在未登录时访问“注销”,并显示警告祝酒词。当我第一次输入 url 时,它没有显示任何内容,但从第二次开始,它一直显示 2 条 toast 消息。
我尝试使用 this solution,但没有删除我的重复消息,而是不再显示任何内容。
def logout_request(request):
if not request.user.is_authenticated:
messages.warning(request, "You must log in to log out!")
return redirect("/")
logout(request)
messages.info(request, "Logged out successfully!")
return redirect("/")
<div class="message-wrapper">
{% for msg in messages %}
<div class="toast" data-autohide="true" data-delay="1500">
{% if msg.tags == 'success'%}
<div class="toast-header toast-header-success">
<strong class="mr-auto">Success</strong>
{% elif msg.tags == 'info'%}
<div class="toast-header toast-header-primary">
<strong class="mr-auto">Information</strong>
{% elif msg.tags == 'warning'%}
<div class="toast-header toast-header-warning">
<strong class="mr-auto">Warning</strong>
{% elif msg.tags == 'error'%}
<div class="toast-header toast-header-danger">
<strong class="mr-auto">Error</strong>
{% endif %}
<button type="button" class="ml-2 mb-1 close button-close" data-dismiss="toast" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="toast-body">
{{ msg }}
</div>
</div>
{% endfor %}
</div>
【问题讨论】:
-
在您的模板中,在
for循环的顶部,打印{{ msg.tags }}以确保它是您所期望的。 -
我尝试输入
<p>{{msg.tags}}</p>,标签是warning,这是我所期望的。问题是,我第一次尝试时没有显示任何内容,而是显示了标签和 1 个 toast 消息,第二次等之后,它显示了 2 个 toasts -
Django 消息基于
Cookies。这意味着,如果您应该删除 cookie。您应该每次都在模板中的消息上iterate。否则会重复! -
我已经使用了
{% for msg in messages %},但我不知道为什么它只是跳过了我的第一条消息。
标签: python html django python-3.x django-views