在href烧瓶中运行函数



我的网站有thwo hrefs,在这个hrefs下,我有我的烧瓶函数download_file((。它正在工作,但现在我在烧瓶中添加了一个参数。所以现在我想在有人点击第一个href时运行download_file(1(,在有人单击href2 时运行downloadfile(2(

<h2>Download a file </h2>
<p>
<a href="{{url_for('download_file')}}">Download1</a>
<a href="{{url_for('download_file')}}">Download2</a>
</p>


############ FLASK CODE
from flask import Flask, send_file, render_template
app = Flask(__name__)

@app.route('/')
def download():
return render_template('indexdownload.html')

@app.route('/download')
def download_file(number):
p = "test"
if number == 1:
p = "1.txt"
elif number == 2:
p = "2.txt"
return send_file(p, as_attachment=True)

app.run()

我尝试了不同的方法,但总是会遇到一些语法错误,因为我不知道怎么做。

具有href属性的锚点发送GET请求
在GET请求中有几种可供选择的发送数据的方法。

变量规则

在URL中传递数据的一种方法是使用可变规则。这些值嵌入到路径中,在服务器端提取,并作为参数传递给端点。

@app.route('/download/<int:num>')
def download(num):
# ...
URL参数

另一种选择是将其作为URL参数传递。在这种情况下,数据必须在端点内请求,并且不一定可用
使用对象request.args的名称查询相应的参数。可以定义默认值,也可以通过指定类型自动转换值。

@app.route('/download')
def download():
num = request.args.get('num', 0, type=int)
# ...

在这两种情况下,都可以将值传递给jinja2语句url_for以形成url。

url_for('download', num=1)

根据请求中的代码和预期用途,我建议使用第一种变体。因此,您假设指定了一个值。您可以将文件名放在一起并交付文件
顺便说一句,您也可以在URL中传递整个文件名。

@app.route('/download/<path:filename>')
def download(filename):
# ...
<a href="{{ url_for('download', filename='1.txt') }}">Download</a>

最新更新