Flask读取img标签src属性时遇NoneType错误,求解决
问题原因分析
你的代码报错核心原因有两个:
<img>不是表单提交控件:浏览器提交表单时,只会发送<input>、<select>、<textarea>这类表单控件的数据,<img>仅用于展示图片,它的src属性不会被自动包含在POST请求里,所以request.files.get('imageFile')返回None,调用filename属性自然触发AttributeError。- 误解了文件上传逻辑:
request.files用于获取前端通过<input type="file">上传的文件,而你只是要读取图片的src路径,不属于文件上传场景,用这个方法完全不对。
解决方法
要把图片的src值传到后端,可在表单里添加一个隐藏输入框,把{{DDTimage}}的值存进去,提交表单时就能携带该数据:
1. 修改前端表单
<form id="imageForm" method="post" action="/printDDT"> <img name="imageFile" src={{DDTimage}} width="50%" height="50%"> <!-- 添加隐藏输入框存储图片src的值 --> <input type="hidden" name="imageSrc" value="{{DDTimage}}"> <br/><br/> <button type="submit">Print DDT</button> </form>
2. 修改后端Flask代码
直接从request.form中获取隐藏输入框的值即可,无需使用request.files:
from flask import request, secure_filename import os @app.route("/printDDT", methods=["GET", "POST"]) def printDDT(): if request.method == "POST": # 从表单中获取图片src的值 image_src = request.form.get('imageSrc') # 如需提取文件名,直接处理路径即可 print(secure_filename(os.path.basename(image_src))) fileList = updateFile() DDTimage = os.path.join(app.config['JPG_FOLDER'], 'ddt.jpg') return render_template('home.html', fileList=fileList, DDTimage=DDTimage)
额外说明
如果{{DDTimage}}本身就是后端渲染时传入的路径,其实可以不用前端传递,直接在后端重新生成该路径(比如你代码里已经在生成DDTimage = os.path.join(...)),这样更高效。
内容的提问来源于stack exchange,提问作者Alessandro Chiodo
相关产品推荐
相关产品推荐

