【发布时间】:2018-03-21 11:02:41
【问题描述】:
当有人退出我的页面时,我想在 HTML 中添加一个段落,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')
当我在注销后在index_page 中打印message 时,它会正确打印出"You have successfully logged out",即使我打印render_template('index.html',message=message),它也会给出正确的HTML,其中message 应该在哪里。但它实际上并没有在屏幕上正确呈现页面,就好像 message 未定义一样。
如果我直接用index_page (message = "You have successfully logged out") 定义message,它会正确呈现。
编辑: 谢谢,我试过这样做。但是,问题是在渲染之前一切正常。考虑一下我所做的这段代码:
@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 1
Checkpoint 2
Checkpoint 4 "You have successfully logged out"
"GET /?message=You+have+successfully+logged+out HTTP/1.1" 200 -
我仍然看到显示“其他消息”的页面。
如果我打印出检查点 5,它会在两种情况下都提供正确的 HTML 和正确的消息。
请注意,在第一种情况下,我没有收到 GET /?message=something 形式的 GET 请求,也许这就是问题所在?
【问题讨论】:
-
为什么不直接使用 flash()?