使用django上传文件

时间:2017-05-03 14:11:04

标签: python django file-upload

我正在使用django开发一个用于在服务器上上传文件的应用程序。我已经在forms.py和models.py文件中分别定义了一个表单和模型,如下所示(分别):

from django import forms

class DocumentForm(forms.Form):
    docfile = forms.FileField(
        label=''
    )

并在models.py中:

from django.db import models

# Create your models here.

    class Document(models.Model):
        docfile = models.FileField(upload_to='targetdir')

在我的HTML文件中,我的表单是:

    <form  class="myclass" action="submit" method="post">
    {% csrf_token %}

    <p>
                {{ form.docfile.errors }}
                {{ form.docfile }}
</p>


        <br />
            <input font-size="50px" style="zoom:1.5"  class="myclass" dir="rtl" type="submit" value="upload"  id="button" class="top-menu" onclick="pythonhandler()" />

现在,每当我提交表单并且我想通过以下代码在服务器上接收我上传的文件时,我得到了#34;

raise MultiValueDictKeyError(repr(key))
MultiValueDictKeyError: "'docfile'""

错误。我的views.py文件:

def pythonhandler(request):

    if request.method == 'POST':
        try:
                    data = request.FILES.get('docfile') 
                    with open(os.getcwd()+'/mydirectory/'+request.FILES['docfile'].name, 'wb+') as destination:
                        for chunk in request.FILES['docfile'].chunks():
                            destination.write(chunk)

我在thisthisthis问题中执行了上述步骤,但我又收到了此错误!

2 个答案:

答案 0 :(得分:1)

在您的视图功能

def pythonhandler(request):
data = DocumentForm(request.POST, request.FILES)

并在你的html文件中

<form  class="myclass" action="submit" enctype="multipart/form-data" method="post">
    {% csrf_token %}

    <p>
                {{ form.docfile.errors }}
                {{ form.docfile }}
</p>
            <input type="submit" value="upload" id="button" class="top-menu" onclick="pythonhandler()" />

答案 1 :(得分:0)

我的HTML文件中的表单标记中缺少enctype =“multipart / form-data”命令。因此,我在HTML文件中的表单必须如下:

Int