Python Flask render_template无法正确呈现

时间:2018-03-21 11:02:41

标签: python flask jinja2

当有人退出我的页面时,我想在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定义messageindex_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请求,这可能是问题所在吗?

1 个答案:

答案 0 :(得分:0)

一般情况下:永远不会发现try/except捕获所有异常。

您将错过重要的错误,例如在这种情况下。管理员无法安全地升级程序。

在这种情况下,您有一个session['logged_in']而没有设置值(在index_page中)。我认为这会导致异常(会话中的未定义项),所以它永远不会写message