如何将值从模板传递到烧瓶

时间:2018-07-26 15:55:11

标签: python html flask jinja2

我想生成一个无限量文件的下载链接列表。 想法是生成到(/ download /)的重新路由链接。但是,这给了我一个错误:

** werkzeug.routing.BuildError: Could not build url for endpoint 'download'. Did you forget to specify values ['filename']?**

知道我在做什么错吗?抱歉,格式混乱,这是我整天尝试所有内容后的第一次。 编辑:我已经尝试过语法更改,并且它们不起作用。因此,我问了这个问题。 这是代码。


{% extends "base.html" %}

{% block content %}
    {% for file in files %}
    <div><a href="{{ url_for('download', file.name) }}">{{ file.name }}</a></div>
    <!-- <div><p>{{ file.name }}</p></div> -->
    {% endfor %}

    <div class="container">
        <h1>File Input</h1>
        <form method="POST" action="/upload" enctype="multipart/form-data">
        <div class="form-group">
            <label for="inputFile">File input</label>
            <input type="file" name="inputFile">
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
    </form>
    </div>
{% endblock %}

class File(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(300))
    #timestamp = db.Colum(db.Datetime, index=True, default=datetime.utcnow)
    data = db.Column(db.LargeBinary)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __repr__(self):
        return '<FileContents {}>'.format(self.name)

@app.route('/download/<filename>')
def download(filename):
    file_data = File.query.filter_by(name = filename).first()

    return send_file(BytesIO(file_data.data),attachment_filename=filename, as_attachment=True)
@app.route('/files')
def files():
    files = File.query.all()

    return render_template('files.html', title='Files', files=files)

1 个答案:

答案 0 :(得分:4)

url_for接受关键字参数,而不接受位置参数。应该是:

{{ url_for('download', filename=file.name) }}