【问题标题】:How To Handle Python Flask Redirect如何处理 Python Flask 重定向
【发布时间】:2012-12-06 05:50:22
【问题描述】:

我想知道在 Flask 中提供重定向的最佳方式是什么。我有一个如下所示的删除按钮:

<a href="/elastic_ips/{{region}}/delete/{{eli['public_ip']}}"><button class="btn btn-danger btn-mini" type="button">Delete</button></a>

调用这个app.route:

@app.route('/elastic_ips/<region>/delete/<ip>')
def delete_elastic_ip(region=None,ip=None):
        creds = config.get_ec2_conf()
        conn = connect_to_region(region, aws_access_key_id=creds['AWS_ACCESS_KEY_ID'], aws_secret_access_key=creds['AWS_SECRET_ACCESS_KEY'])
        ip = ip.encode('ascii')
        elis = conn.get_all_addresses(addresses=ip)

        for eli in elis:
                result = []
                r = eli.release()
                result.append(r)
        return Response(json.dumps(result), mimetype='application/json')

我宁愿不将结果作为 json 返回。我不确定使用删除按钮返回页面的“正确”方式是什么。要么我可以放入一个仅重定向到引用的 HTML 页面,或者 Flask 中是否有内置方法可以返回 app.route?

【问题讨论】:

    标签: python flask


    【解决方案1】:

    如果你想返回delete_elastic_ip的url,用url_for函数(more about this function)很容易做到

    不知道这个端点是否在某个蓝图中,如果没有,就这么简单:

    from flask import url_for, redirect
    .... your code ...
    return url_for('delete_elastic_ip', region=None, ip=None)
    

    您当然也可以用您需要的值替换 Nones :) 这会将您的 url 返回到端点。顺便说一句,这也是使用模板中的 url 的一种方式。不要对它们进行硬编码,使用 jinja 模板中的 url_for 函数为您生成视图的 url。该函数可用作模板中的标准全局变量 (more)

    此外,如果您只想直接重定向到其他端点并且不返回任何内容,则烧瓶中有一个函数redirect。将它与 url_for 结合使用,您就可以开始了;)

    from flask import url_for, redirect
    ... your code...
    return redirect(url_for('delete_elastic_ip', region=None, ip=None))
    

    它会刷新页面,所以不是 ajax 重定向的最佳方式,但如果你愿意的话。对于 ajax,只需返回带有 url_for 结果的 json 并用它来处理。

    【讨论】:

    • 谢谢,其实我想回到调用delete_elastic_ip函数的页面,但是你解释的很到位!!
    【解决方案2】:

    这是另一个使用 render_template 的方法 app.py 代码

    from flask import Flask, request,render_template
    app = Flask(__name__)
    
    @app.route('/')
    def index():
    
        return render_template('index.html')
    
    @app.route('/v_timestamp')
    def v_timestamp():
    
        return render_template('v_timestamp.html')
    
    

    然后可以重定向到 v_timestamp 页面。如果您希望通过按钮单击事件来完成此操作。在模板文件夹中,在您的 v_timestamp.html 中有这段代码

    <p align="center"><a href=v_timestamp ><button class=grey style="height:75px;width:150px">v timestamp</button></a></p>
    

    在同一个段落元素内定义按钮元素和一个href,在我的例子中,a href v_timestamp 表示v_timetsamp.html 编写您要重定向到的相应.html 页面。

    文件结构

    -app.py

    -模板

    • index.html
    • v_timestamp.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-09
      • 2018-06-13
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多