You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask读取img标签src属性时遇NoneType错误,求解决

问题原因分析

你的代码报错核心原因有两个:

  1. <img>不是表单提交控件:浏览器提交表单时,只会发送<input>、<select>、<textarea>这类表单控件的数据,<img>仅用于展示图片,它的src属性不会被自动包含在POST请求里,所以request.files.get('imageFile')返回None,调用filename属性自然触发AttributeError。
  2. 误解了文件上传逻辑: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:40:37