我在这个Django文件上传表单中做错了什么?
这是我的表单:
from django import forms
class UploadFileForm(forms.Form):
titl = forms.CharField(max_length=50)
ffile = forms.FileField()
这是我的views.py文件:
def handle_uploaded_file(file_path):
print "handle_uploaded_file"
dest = open(file_path.name,"wb")
for chunk in file_path.chunks():
dest.write(chunk)
dest.close()
def handle_upload(request):
c = {}
c.update(csrf(request))
if request.method == "POST":
form = UploadFileForm(request.POST)
if form.is_valid():
handle_uploaded_file(request.FILES["ffile"])
return HttpResponseRedirect("/thanks")
else:
form = UploadFileForm()
c.update({"form":form})
return render_to_response("upload.html",c)
这是upload.html的内容:
<form enctype="multipart/form-data" method="post" action="/handle_upload/">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Upload it"/>
</form>
每次我尝试提交表单时,都会收到“这个字段是必填的”这样的提示,特别是针对ffile
这个字段。我哪里做错了呢?顺便提一下,我每次都在上传一个文件。
3 个回答
如果你已经在代码中加入了 request.FILES
,并且设置了 enctype="multipart/form-data"
,但还是遇到这个错误,那可能是因为你没有正确声明 <input>
标签。
比如,如果你在模板中明确写了输入框的 HTML 代码,如下所示:
<input type="file" value="Upload CSV File" />
你可能没有传递输入表单元素所需的 id 或 name 属性。
确保你的模板中使用了表单元素标签,也就是 {{ form.file }}
,这样 Django 会在页面上渲染成: <input id="id_file" name="file" type="file" required="">
。
为了以后参考,我也遇到了同样的错误,虽然我在表单初始化时已经包含了request.FILES
。问题出在模板上:我忘了在<form>
标签中添加enctype="multipart/form-data"
这个属性。
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如说,有人可能在使用一个叫做“库”的东西时,发现它的某些功能不太好用,或者在运行代码的时候出现了错误。
这些问题通常会让人感到困惑,因为我们可能不知道为什么会这样,或者该如何解决。解决这些问题的一个好方法是去网上查找相关的信息,比如在一个叫做StackOverflow的网站上,很多程序员会分享他们遇到的问题和解决方案。
在这个网站上,你可以看到很多人提问和回答,大家互相帮助。通过阅读这些内容,我们可以学到很多东西,找到解决自己问题的方法。
总之,遇到问题时,不要害怕去寻求帮助,网上有很多资源可以帮助你理解和解决编程中的各种难题。
form = UploadFileForm(request.POST, request.FILES)