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

2024-10-04 03:21:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 文件path方法targetfor定义os文件名
1条回答
网友
1楼 · 发布于 2024-10-04 03:21:14
  • 发生错误的原因是您在else:station内创建了局部变量
  • 例如,如果条件是它触发了if:部分 在代码中local variable文件名永远不会被创建
  • 因此,当您试图在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

相关问题 更多 >