在这个django文件上传表单中我做得不好?

时间:2011-05-30 19:10:05

标签: python django validation

这是我的表格:

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 :(得分:44)

仅供将来参考。虽然我在表单初始化中包含request.FILES,但我遇到了同样的错误。问题出在模板中:我忘了将enctype="multipart/form-data"属性添加到<form>标记。

答案 1 :(得分:30)

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

答案 2 :(得分:0)

如果您已添加request.FILES并添加enctype="multipart/form-data",但仍然看到此错误,则可能是您未正确声明<input>

例如,如果在模板中明确声明输入html,如:

<input type="file" value="Upload CSV File" />

您可能没有传递输入表单元素的预期输入ID或名称属性。

确保您的模板使用表单元素标记,即{{ form.file }}, 然后django会在页面上呈现为:<input id="id_file" name="file" type="file" required="">