当有人退出我的页面时,我想在Jinja中添加一个段落,表示他们已成功注销。它可以实际返回render_template。
@app.route('/logout',methods=['POST'])
def logout():
session['logged_in'] = False
message = "You have successfully logged out"
return redirect(url_for('index_page',message=message))
@app.route('/', methods=['POST','GET'])
def index_page():
try:
session['logged_in']
message = request.args['message']
return render_template('index.html',message=message)
except:
session['logged_in'] = False
return render_template('index.html')
在我退出后在message
打印index_page
时,它会正确地打印出"You have successfully logged out"
,即使我打印render_template('index.html',message=message)
,它也会使用{{1}提供正确的HTML它应该在哪里。但它实际上并没有在屏幕上正确呈现页面,就像message
未定义一样。
如果我直接使用message
定义message
(index_page
),则会正确呈现。
编辑: 谢谢,我试过这样做。但是,问题是在渲染之前一切正常。考虑一下我做的代码:
message = "You have successfully logged out"
因此,当我只刷新页面(不传递消息)时,我的控制台输出类似于:
@app.route('/', methods=['POST','GET'])
def index_page():
try:
print("Checkpoint 1")
message = request.args['message']
print("Checkpoint 2")
except:
print("Checkpoint 3")
message = "Other message"
print("Checkpoint 4",message)
#print("Checkpoint 5",render_template('index.html',message=message))
return render_template('index.html',message=message)
我得到的页面是"其他消息"
但是,如果我先通过调用Checkpoint 1
Checkpoint 3
Checkpoint 4 "Other message"
"GET / HTTP/1.1" 200 -
来传递消息,我会得到类似的内容:
logout
我仍然得到页面说"其他消息"。
如果我打印出Checkpoint 5,它会在两种情况下都提供正确的HTML格式的正确HTML。
请注意,在第一种情况下我不会以Checkpoint 1
Checkpoint 2
Checkpoint 4 "You have successfully logged out"
"GET /?message=You+have+successfully+logged+out HTTP/1.1" 200 -
的形式收到GET请求,这可能是问题所在吗?
答案 0 :(得分:0)
一般情况下:永远不会发现try/except
捕获所有异常。
您将错过重要的错误,例如在这种情况下。管理员无法安全地升级程序。
在这种情况下,您有一个session['logged_in']
而没有设置值(在index_page
中)。我认为这会导致异常(会话中的未定义项),所以它永远不会写message
。