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

Django文件上传遇MultiValueDictKeyError及print无输出问题求助

解决Django文件上传的MultiValueDictKeyError和print输出问题

咱们先搞定第一个报错:MultiValueDictKeyError at /upload/ 'document',这个问题主要有两个核心原因:

1. 表单enctype属性拼写错误

你写的表单enctype是multipart/from-data,这里把form拼成了from!正确的属性值应该是multipart/form-data,这个属性是告诉浏览器以二进制格式提交文件数据,拼写错误的话,文件根本不会被放到request.FILES里,自然找不到document这个键。

修改后的upload.html代码:

{% block content %} 
<h2>Upload</h2> 
<form method="post" enctype="multipart/form-data"> 
{% csrf_token %} 
<input type="file" name="document"> 
<button type="submit">Upload file</button> 
</form> 
{% endblock %}

2. 安全获取文件对象

即使修复了enctype,也建议不要直接用request.FILES['document']索引——万一用户没选文件就提交,还是会触发类似报错。可以用get方法安全获取,再做判断:

uploaded_file = request.FILES.get('document')
if uploaded_file:
    print(f"上传的文件名:{uploaded_file.name}")

再来说第二个问题:看不到print的输出。

Django开发服务器的print内容不会显示在浏览器里,而是输出在你启动服务器的终端窗口里!比如你是用python manage.py runserver命令启动的Django,那这个命令所在的终端就是输出的地方,你需要切换到那个终端标签页,就能看到print的内容了。

如果用的是IDE(比如PyCharm、VS Code),要确保你是在IDE的终端面板里启动的服务器,并且没有关闭或隐藏这个面板。

最后给你整理好的views.py代码:

from django.shortcuts import render 

def upload(request): 
    if request.method == 'POST': 
        uploaded_file = request.FILES.get('document')
        if uploaded_file:
            print(f"成功获取文件:{uploaded_file.name}")
        else:
            print("用户没有选择文件就提交了")
    return render(request, 'upload.html')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 07:52:39