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

Django图片上传系统访问/change-part/路径出现MultiValueDictKeyError报错求解

错误产生原因

MultiValueDictKeyError是Django的MultiValueDict(request.FILES就是该类型的实例)特有的报错,触发原因是你直接用不存在的键从request.FILES中取值。
当用户未上传name属性为img_static的文件时,request.FILES中根本不会生成img_static这个键。你代码中先执行request.FILES['img_static']取值再判断长度的逻辑,在键不存在时第一步取值就会抛出错误,不会执行后续的长度判断逻辑。

解决方法

推荐两种可直接落地的修改方案:

方案1:使用get()方法取值(最简洁)

MultiValueDict和标准字典一样支持get方法,键不存在时会直接返回你指定的默认值,不会抛出异常。
两段代码可以分别修改为:

  • 动态图片处理逻辑:
img_dinamic = request.FILES.get('img_dinamic', "")
if img_dinamic:
    part = WebPart.objects.get(part=partToChange)
    if part.dinamic_image:
        os.remove(part.dinamic_image.path)
  • 静态图片处理逻辑:
img_static = request.FILES.get('img_static', "")

方案2:先判断键是否存在再操作

如果你需要保留原有if-else的写法结构,可以先判断对应键是否存在于request.FILES中,再执行后续逻辑:
静态图片代码修改为:

if 'img_static' in request.FILES and len(request.FILES['img_static']) != 0:
    img_static = request.FILES['img_static']
else:
    img_static = ""

动态图片的代码也可以按照同样的逻辑修改,可避免同类报错。

内容的提问来源于stack exchange,提问作者Ashof Zulkarnaen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:54:03