我正在上传文件,所以我试图在循环后传递文件名,但我得到了一个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