将文件名作为参数从 Python Flask 中的 for 循环传递



我正在上传文件,所以我试图在循环后传递文件名,但我得到了一个unbountLocalerror. 我尝试将文件名设为全局,以便在 for 循环之外可以看到它,但未定义其抛出文件名。 我还可以使用什么其他方法来获取文件名,以便我可以在HTML/Jinja中使用它

@app.route('/upload', methods=['POST'])
def upload():
target = os.path.join(APP_ROOT,'static/')
if not os.path.isdir(target):
os.mkdir(target)
else:
for upload in request.files.getlist('file'):
filename = upload.filename
destination = "/".join([target, filename])
upload.save(destination)
return render_template("upload.html",filename=filename)
  • 发生此错误是因为您在else语句中创建了局部变量。
  • 例如,如果条件是它触发了if:部分 的代码,永远不会创建局部变量filename
  • 因此,当您尝试在return render_template("upload.html",filename=filename)中访问它时,会发生unbound错误。
  • 您似乎还想返回多个渲染 - 因为您不仅有一个filename,而是一堆。
  • 我更改了函数以返回基于附加到第 10 行 (filenames.append(upload.filename)) 上的filenames列表创建的render_template对象列表。

法典:

@app.route('/upload', methods=['POST'])
def upload():
target = os.path.join(APP_ROOT,'static/')
if not os.path.isdir(target): #Create the target folder if it doesnt exitst
os.mkdir(target)
filenames = []
for upload in request.files.getlist('file'): #Upload files into the folder
filenames.append(upload.filename)
destination = "/".join([target, upload.filename])
upload.save(destination)
return [render_template("upload.html",filename = filename) for filename in filenames] #Return therender_template

最新更新