【问题标题】:How to upload a file from an html into Django forms如何将文件从 html 上传到 Django 表单
【发布时间】:2022-01-19 05:45:55
【问题描述】:

每次我上传文件时,forms.is_valid() = False。

下面是我的views.py:

def upload_pdf(request):
    if request.method == 'POST':

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

        if form.is_valid():  # this is always FALSE!!!
            
            # write file into folder first
            text = handle_uploaded_file(request.FILES['file'])
            print("text")
            return HttpResponseRedirect('pdfExtractor_app/result.html')
    else:
        print("form not valid")
        form = UploadFileForm()
    return render(request, 'pdfExtractor_app/upload.html', {'form': form})

这是我的forms.py:

from django import forms

class UploadFileForm(forms.Form):
    title = forms.CharField(max_length=50)
    file = forms.FileField()

这是我的 upload.html 文件:

<body>  
<form method="POST" class="post-form">  
        {% csrf_token %}  
        {{ form.as_p }}  
        <button type="submit" class="save btn btn-default">Save</button>  
</form>  
</body>  

输入标题和文件, 但我得到的表单永远不会在views.py中被读取。

这就是我得到的 form.errors

 <ul class="errorlist"><li>file<ul class="errorlist"><li>This field is required.</li></ul></li></ul>        
[15/Dec/2021 21:10:56] "POST /upload_pdf/ HTTP/1.1" 

这是 Querydict 中的内容:

<QueryDict: {'csrfmiddlewaretoken': ['b123ASDDoddfkkdzrPXa5P2kKEsp7dBASXQWXfffwwdffgKGLGVVffML'], 'title': ['as'], 'file': ['UsabilityTest.pdf']}>

谢谢!

【问题讨论】:

  • 你在哪里得到&lt;QueryDict: {'csrfmiddlewaretoken': ['b123ASDDoddfkkdzrPXa5P2kKEsp7dBASXQWXfffwwdffgKGLGVVffML'], 'title': ['as'], 'file': ['UsabilityTest.pdf']}&gt; 形式有效块或形式无效?
  • enctype="multipart/form-data" 添加到模板中的表单标签
  • 你的handle_uploaded_file函数是什么?

标签: html django


【解决方案1】:

enctype="multipart/form-data" 添加到模板中的表单标签就可以了,并使form.is_valid() 等于true。

我把uploads.html改成:

<body>  
<form method="POST" class="post-form" enctype="multipart/form-data">  
        {% csrf_token %}  
        {{ form.as_p }}  
        <button type="submit" class="save btn btn-default">Save</button>  
</form>  

感谢大家在 cmets 中提供有用的反馈!

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    相关资源
    最近更新 更多