如何在Flask的Jinja模板中遍历Flash消息传递的列表
解决Flask中Flash列表后遍历显示单个元素的问题
方案一:后端逐个Flash列表元素
修改Python路由代码,循环列表中的每个元素,分别调用flash()函数:
@app.route("/result") def test(): my_list = ["item1","item2","item3","item4"] for item in my_list: flash(item) return render_template("temp.html")
此时原有HTML模板代码无需修改,get_flashed_messages()会返回包含所有单个元素的列表,遍历后就能逐个显示每个item。
方案二:前端模板中遍历Flash传递的列表
如果不想修改后端代码,可调整Jinja模板,先取出Flash传递的列表对象,再遍历它:
{% with messages=get_flashed_messages() %} {% if messages %} <ul> {% for item in messages[0] %} <li>{{ item }}</li> {% endfor %} </ul> {% endif %} {% endwith %}
这里messages[0]就是通过flash(my_list)传递的列表,直接遍历它就能得到每个元素。
原有代码问题说明
flash()函数会把传入的参数作为单个消息存入消息列表,所以flash(my_list)之后,get_flashed_messages()返回的是嵌套列表[["item1","item2","item3","item4"]]。原有模板遍历外层列表,自然会把整个内层列表作为一个元素输出。
内容的提问来源于stack exchange,提问作者Moeez Raza
相关产品推荐
相关产品推荐

