Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过Django formset上载多个文件-多值DictKeyError_Python_Django_File_Upload_Formset - Fatal编程技术网

Python 通过Django formset上载多个文件-多值DictKeyError

Python 通过Django formset上载多个文件-多值DictKeyError,python,django,file,upload,formset,Python,Django,File,Upload,Formset,试图制作一个能够处理多个文件上传并将其存储到标准位置的应用程序,但我遇到了一个问题。提交表单时,django在/pdfchecker处返回“MultiValueDictKeyError”/ “'docfile'” forms.py from django import forms class UploadPdf(forms.Form): docfile = forms.FileField(label='Browse') class UploadPdfUrl(forms.For

试图制作一个能够处理多个文件上传并将其存储到标准位置的应用程序,但我遇到了一个问题。提交表单时,django在/pdfchecker处返回“MultiValueDictKeyError”/

“'docfile'”

forms.py

    from django import forms

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

class UploadPdfUrl(forms.Form):
    docurl = forms.URLField(label='Address')
modelys.py

    from django.db import models

class handle_UploadPdf(models.Model):
    docfile = models.FileField(upload_to='.')
views.py

def上传(请求):

HTML模板:

<div class="f_unify">
        <form class="simpleform" action="" method="post" enctype="multipart/form-data">
            {{ formsetFile.management_form }}
            {% for form in formsetFile.forms %}
                        <fieldset class="mainfieldset">
                        <legend class="outer">
                        <span class="legendtext">Check by URI</span>

                        </legend>
                        <div class="singlerow">

                        {% csrf_token %}
            {{ formURL.as_table }} 

                        <input type="submit" value="Check" />
                        </div>


            <span class="description">(<cite>http://www.egovmon.no/test.pdf</cite>)</span>
                        </fieldset>


            {% endfor %}
        </form>
                <form class="simpleform" action="." method="post" enctype="multipart/form-data">
            {{ formsetFile.management_form }}
            {% for form in formsetFile.forms %}
                        <fieldset class="mainfieldset">
                        <legend class="outer">
                        <span class="legendtext">Check by File Upload</span>
                        </legend>

                        <div class="singlerow">
            <div class="table">
                <input type="submit" value="Check" />
            <table class='no_error'>        
            {% csrf_token %}
            {{ formsetFile.as_p }}

            </table>

                        </div>

            </div>



                        </fieldset>
            {% endfor %}
            <script>
                var maxRows = 10;
                var i = 1;
                $('#add_more').click(function() {
                    if(i < maxRows) {
                    cloneMore('div.table:last', 'service' + i++);
                    }
                    else {
                        alert('You can only upload 10 files per instance')
                        }
                })

            </script>


        </form>


</div>
错误:

Error:

    MultiValueDictKeyError at /pdfchecker/

"'docfile'"

Request Method:     POST
Request URL:    http://tt5.s.tingtun.no:7842/pdfchecker/
Django Version:     1.6.1
Exception Type:     MultiValueDictKeyError
Exception Value:    

"'docfile'"

Exception Location:     /usr/local/lib/python2.7/dist-packages/django/utils/datastructures.py in __getitem__, line 301
Python Executable:  /usr/bin/python
Python Version:     2.7.6
Python Path:    

['/home/student/django/1utkast/src',
 '/usr/local/lib/python2.7/dist-packages/TingtunUtils-0.1-py2.7.egg',
 '/usr/local/lib/python2.7/dist-packages/requests-2.0.1-py2.7.egg',
 '/usr/local/lib/python2.7/dist-packages/setuptools-2.0.1-py2.7.egg',
 '/usr/local/lib/python2.7/dist-packages/pip-1.4.1-py2.7.egg',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PILcompat',
 '/usr/lib/pymodules/python2.7']

Server time:    Mon, 28 Apr 2014 14:10:07 +0000
回溯:

Traceback Switch to copy-and-paste view

/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py in get_response

                        response = wrapped_callback(request, *callback_args, **callback_kwargs)

    ...
▶ Local vars
/home/student/django/1utkast/src/pdfchecker/views.py in upload

                newdoc = handle_UploadPdf(docfile = request.FILES['docfile'])

    ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/utils/datastructures.py in __getitem__

                raise MultiValueDictKeyError(repr(key))

    ...
▶ Local vars 
在views.py中

request.FILES['docfile']
引发多值DictKeyError,其中

if request.method == 'POST':
    formsetFile = UploadPdfFormSet(request.POST, request.FILES)

    if formsetFile.is_valid():
        newdoc = handle_UploadPdf(docfile = request.FILES['docfile'])
        newdoc.save()

        return HttpResponse('yey')
此代码段不检查请求的文件是否包含文件“docfile”,因此它给出了多值错误。因此,如果您在前面检查request.FILES中是否有“docfile”,那么它将解决错误

if formsetFile.is_valid() and 'docfile' in request.FILES:
    newdoc = handle_UploadPdf(docfile = request.FILES['docfile'])
    newdoc.save()

因为如果request.FILES['docfile']不在request.FILES中,它就不会编译still@rajasimon不。我修好了。不记得是怎么回事。哈哈。请在你的代码应答中添加一些描述,欢迎使用SO!虽然这段代码可以回答这个问题,但提供关于它如何和/或为什么解决问题的附加上下文将提高答案的长期价值。请仔细阅读,不便之处,敬请谅解。非常感谢您为我提供的资源。
if request.method == 'POST':
    formsetFile = UploadPdfFormSet(request.POST, request.FILES)

    if formsetFile.is_valid():
        newdoc = handle_UploadPdf(docfile = request.FILES['docfile'])
        newdoc.save()

        return HttpResponse('yey')
if formsetFile.is_valid() and 'docfile' in request.FILES:
    newdoc = handle_UploadPdf(docfile = request.FILES['docfile'])
    newdoc.save()