我想生成一个无限量文件的下载链接列表。 想法是生成到(/ 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)
答案 0 :(得分:4)
url_for
接受关键字参数,而不接受位置参数。应该是:
{{ url_for('download', filename=file.name) }}