在index.html
页面中,我有以下用于加载Flash消息的Jinja模板代码
{% for message in get_flashed_messages() %}
<div class='alert alert-warning'>
<button type='button' class='close' data-dismiss='alert'> × </button>
{{ message }}
</div>
{% endfor %}
和可以点击的注销文本(这里使用了Vue.js)
<ul class='nav navbar-nav navbar-right' v-if='signedIn'>
<li> <a @click='onLogout'>Logout</a> </li>
</ul>
和相关的javacript代码是
onLogout: function(){
axios.get('/auth/logout')
.then(response => {
this.signedIn = false;
})
.catch(error => {console.log(error);})
},
并且请求处理程序是
@auth.route('/logout')
def logout():
flash('You have logged out.')
return redirect(url_for('home.index'))
鉴于上述设置,注销有效,但不显示闪光灯。这是什么原因,我该如何解决?感谢。
答案 0 :(得分:0)
在呈现index.html
模板时,即在页面加载时,代码中的Flash消息仅 显示。
但是,您从AJAX(一个简单的/logout
请求)调用XMLHttpRequests
端点,并且重定向到home.index
仅在AJAX响应中发生,而不是在站点/页面上发生 - 水平。此响应的处理程序仅设置this.signedIn = false;
,仅此而已。
要解决此问题,您有两个选项,(1)在注销子请求完成后,在您的then
处理程序中将用户重定向到索引页;或者更复杂的(2),返回应该&#34;闪烁的消息列表&#34;在AJAX响应中,并从JavaScript手动显示它们,替换(或附加)到现有消息。