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

