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
相关产品推荐
相关产品推荐

