【问题标题】:Routing view to another URL based on parameters根据参数将视图路由到另一个 URL
【发布时间】:2012-08-03 21:14:14
【问题描述】:

我有一个简单的 Flask 应用程序,其中包含一些基本视图。这些视图之一称为结果。它所做的是使用 GET 获取 URL 参数,然后使用参数进行一系列操作,最后使用 render_template() 渲染模板并将计算值传递给它。

在呈现时,结果 URL 如下所示:

http://127.0.0.1:5000/result?s=abcd&t=wxyz

我想要做的不是在结果视图下渲染模板,而是重定向到一个新视图(我们称之为最终视图),将计算值与重定向一起传递,并从那里。为什么要做这一切?因为我希望最终 URL 看起来像这样:

http://127.0.0.1:5000/final/abcd

如果标题有点含糊,我很抱歉。

【问题讨论】:

    标签: python flask


    【解决方案1】:

    最简单的解决方案就是最终URL中的“abcd”可以是实际结果:

    @app.route("/result")
    def calculate_result():
        s, t = request.args.get("s"), request.args.get("t")
        # Calculate result with s and t
        return redirect(url_for(".display_results", result=result))
    
    @app.route("/final/<result>")
    def display_results(result):
        return render_template("results.html", result=result)
    

    如果不能,那么您可以改用session

    @app.route("/result")
    def calculate_result():
        s, t = request.args.get("s"), request.args.get("t")
        # Calculate result with s and t
        session["result"] = result
        return redirect(url_for(".display_results", result=result))
    
    @app.route("/final/abcd")
    def display_results():
        result = session.get("result")
        return render_template("results.html", result=result)
    

    【讨论】:

    • 我尝试使用第二种方法,但无济于事。 URL 已成功显示,但结果(calculate_result() 存储 3 个变量,其中两个是 dicts)不知何故未在会话中进行。此外,模板被渲染但不被渲染。该页面不包含 CSS,并且所有传递的变量都是 None 类型。
    • @Cyph0n - 您是否在代码中设置了SECRET_KEY?如果您没有一套,该会话将无法进行。
    猜你喜欢
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2017-10-12
    相关资源
    最近更新 更多