Flask是否可以显示列表中的数据并提供下载链接?

时间:2017-01-03 12:37:59

标签: python flask

我创建了一个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>

1 个答案:

答案 0 :(得分:0)

最简单的方法是在模块中定义一个可从每个函数访问的全局变量fruits

fruits = ['apple', 'pear', 'banana', 'grapes', 'mango']

@app.route('/')
def hello_world():
    global fruits
    return render_template('fruit.html', fruit=fruits)


@app.route('/fruits.csv')
def generate_fruit_file():
    def generate():
        global fruits
        for f in fruits:
            yield ''.join(f) + '\n'
    return Response(generate(), mimetype='text/csv')