【发布时间】:2017-05-17 13:23:56
【问题描述】:
我创建了一个 Flask 应用程序,它创建一个列表并将该列表返回到一个 HTML 页面。我还想将列表作为 CSV 文件下载。
到目前为止,我了解如何将这些任务作为单独的功能来完成。
有没有办法将这些功能组合成一个列表,只创建一次列表,在 HTML 模板上显示数据,并提供下载链接?
请查看下面的基本示例:
from flask import Flask, render_template, Response, url_for
app = Flask(__name__)
@app.route('/')
def hello_world():
fruits = ['apple', 'pear', 'banana', 'grapes', 'mango']
return render_template('fruit.html', fruit=fruits)
@app.route('/fruits.csv')
def generate_fruit_file():
def generate():
fruits = ['apple', 'pear', 'banana', 'grapes', 'mango']
for f in fruits:
yield ''.join(f) + '\n'
return Response(generate(), mimetype='text/csv')
if __name__ == '__main__':
app.run(debug=True)
HTML 模板:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
{% for f in fruit %}
<ul>
<li style="display: block;">{{ f }}</li>
</ul>
{% endfor %}
<a href="{{'/fruits.csv'}}">get file</a>
</body>
</html>
【问题讨论】:
-
我相信你的问题缺乏背景。当您说您的应用程序生成一个事物列表时,这意味着该列表是从某些数据生成的。这些数据存储在哪里?
-
Born2Discover:数据通过 API 调用创建并存储到数据库中。在我的主要项目中,我使用生成器函数来收集数据。然后,我将生成器的输出存储到列表对象中,然后将其保存到数据库并在模板上显示。