gpt4 book ai didi

html - request.FILES 在文件上传时始终为空

转载 作者:太空狗 更新时间:2023-10-29 14:08:33 24 4
gpt4 key购买 nike

我完全被这个难住了,一定是在做一些非常愚蠢的事情。我想简单地在 Django 项目上上传一个文件。问题似乎是没有表单数据被传递到服务器——只有 csrf token 。我在 Mac 上运行 Django 1.5.1、python 2.7、virtualenv,并使用内置的 Django 开发服务器。

我的 HTML 表单是:

{% load url from future %}

<form enctype="multipart/form-data" method="POST" action="{% url 'showreport' %}">
{% csrf_token %}
<label>Upload grade csv file: </label>
<input type="hidden" id="testing" value="maybe" />
<input type="file" id="grade_csv" />
<input type="submit" value="Generate Report" />
</form>

我的模型:

from django.db import models

class Document(models.Model):
file = models.FileField(upload_to='/media/', blank=True, null=True)

我的表格.py:

from django import forms
from .models import Document

class DocumentForm(forms.Form):
"""
to handle uploading grades csv file
"""
class Meta:
models = Document

我的观点.py:

def report(request):
"""
Process the CSV file to remove inactive students
Manipulate to get right JSON format
Chart the results
"""
if request.method == 'POST':
form = DocumentForm( request.POST, request.FILES )
if form.is_valid():
newfile = Document( file = request.FILES['file'] )
newfile.save()

classdata = {}
studentdata = {}

return render( request, 'report/showreport.html', { 'classdata': classdata, 'studentdata': studentdata } )
else:
form = UploadFileForm()

return render( request, 'report/index.html', { 'form': form })

我花了几个小时寻找解决方案,但似乎没有任何效果。 I have the enctype set correctly (我认为),I am using input type 'submit' for the form , 和 I am binding the form data to my model (没关系,因为 request.FILES 是空的)。我还尝试根据 this Django newbie page 在表单操作 (action='/report/showreport/') 中使用直接 url ,但这并没有什么不同。据我所知,没有其他脚本绑定(bind)到表单提交操作并覆盖默认操作。

我还意识到上面的代码最有可能是 request.FILES['grades_csv'] 以匹配表单的输入 id...但这也没有关系,因为 request.FILES 是空的。

在尝试调试时,我在 View 中的 if request.method == "POST"之前设置了一个 pdb 跟踪。使用控制台,我可以看到我的 request.POST 不包括我隐藏的“测试”输入,并且 request.FILES 是空的。当我在浏览器中运行它时,它只是将我返回到我的表单页面,基本上是说我的表单无效。我的 pdb 结果在这里:

(Pdb) request.FILES
(Pdb) <MultiValueDict: {}>
(Pdb) request.POST['testing']
(Pdb) *** MultiValueDictKeyError: "Key 'testing' not found in <QueryDict: {u'csrfmiddlewaretoken': [u'0tGCChxa3Po619dCi114Sb9jmWRt82aj']}>"
(Pdb) request.POST
<QueryDict: {u'csrfmiddlewaretoken': [u'0tGCChxa3Po619dCi114Sb9jmWRt82aj']}>

如果我在不检查表单是否有效的情况下尝试访问 views.py 中的 request.FILES,我会收到此错误:

"Key 'file' not found in <MultiValueDict: {}>"

我很困惑并感谢任何关于为什么我不能让它工作的帮助——它看起来应该很简单。我可以使用 pdb 在我的项目目录中手动创建和写入文件,所以我认为权限不是问题...问题出在表单中?

最佳答案

检查您是否添加了 enctype属性(property)入form标签。

示例来自 official docs : <form enctype="multipart/form-data" method="post" action="/foo/">

关于html - request.FILES 在文件上传时始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17708629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com