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 を使用する方法でもあります。それらをハードコーディングしないでください。ジンジャ テンプレートで url_for 関数を使用して、ビューへの URL を生成してください。この関数は、テンプレートで標準のグローバル変数として使用できます (詳細)

また、他のエンドポイントに直接リダイレクトし、何も返さない場合は、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 を返すだけで、それを処理できます。

于 2012-12-06T06:49:24.133 に答える