1

我想知道在 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?

4

2 回答 2

7

好吧,如果你想返回的 url,delete_elastic_ip用函数很容易做到url_for更多关于这个函数

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

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。该函数可用作模板中的标准全局变量(更多

此外,如果您只想直接重定向到其他端点而不返回任何内容,redirectflask 中有一个函数。将它与 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 并用它来做这些事情。

于 2012-12-06T06:49:24.133 回答
1

这是使用 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,在我的例子中,href v_timestamp 表示v_timetsamp.html 编写您要重定向到的相应.html 页面。

文件结构

-app.py

-templates

  • 索引.html
  • v_timestamp.html
于 2020-07-18T18:03:34.910 回答