我有以下Flask应用程序:
@app.route('/')
def serve_index():
return render_template('index.html')
@app.route('/binary/')
def serve_binary():
file_name, file_path = generate_binary()
return send_file(file_path, attachment_filename = file_name, as_attachment=True)
如果我转到localhost/
,我会按预期获得index.html。
如果我转到localhost/binary/
,我会按预期获得二进制文件。
(generate_binary()
是我编写的Python脚本,它生成二进制文件,将其存储在Flask有权访问的文件夹中,并返回文件名以及文件路径。)
现在我想在index.html中写一个链接,让我下载我得到的二进制文件,如果我访问localhost/binary/
。
我的index.html如下所示:
<!DOCTYPE html>
<html>
<body>
<a href="localhost/binary/" target="blank">Link to binary</a>
</body>
</html>
但是,如果我访问localhost/
并点击Link to binary
链接,我会转到localhost/binary/
,但必须重新加载此页面才能获取二进制文件。
我想要的是在不离开index.html
页面的情况下获取文件。
答案 0 :(得分:0)
localhost/binary
是相对路径,而不是完整的网址。使用以下之一:
{{ url_for('serve_binary') }}
- 请求Flask生成网址http://localhost/binary
- 主机名为/binary
- 仅限绝对路径接下来,您要求浏览器在名为blank
的新窗口或选项卡中打开下载。这有两个问题;打开新的未命名窗口或标签的正常名称是_blank
(请注意下划线),对于下载,您不想打开全新的标签。删除那里的target="..."
属性。