我在这个Django文件上传表单中做错了什么?

15 投票
3 回答
6769 浏览
提问于 2025-04-16 18:38

这是我的表单:

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 个回答

0

如果你已经在代码中加入了 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="">

43

为了以后参考,我也遇到了同样的错误,虽然我在表单初始化时已经包含了request.FILES。问题出在模板上:我忘了在<form>标签中添加enctype="multipart/form-data"这个属性。

32

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如说,有人可能在使用一个叫做“库”的东西时,发现它的某些功能不太好用,或者在运行代码的时候出现了错误。

这些问题通常会让人感到困惑,因为我们可能不知道为什么会这样,或者该如何解决。解决这些问题的一个好方法是去网上查找相关的信息,比如在一个叫做StackOverflow的网站上,很多程序员会分享他们遇到的问题和解决方案。

在这个网站上,你可以看到很多人提问和回答,大家互相帮助。通过阅读这些内容,我们可以学到很多东西,找到解决自己问题的方法。

总之,遇到问题时,不要害怕去寻求帮助,网上有很多资源可以帮助你理解和解决编程中的各种难题。

    form = UploadFileForm(request.POST, request.FILES)

撰写回答