django在/'file'处引发MultiValueDictKeyError

时间:2019-09-12 03:54:34

标签: django csv

我正在尝试创建一个用于上传.csv文件并将其解析到模板上的视图,但它返回的是

MultiValueDictKeyError at /

'file'

模板具有

<form method="POST" enctype="multipart/form-data">{% csrf_token %}
<div class="file-field input-field">
<div class="btn">
<span>Upload a CSV FILE</span>
<input type="file" name="file">
</div>
<div class="file-path-wrapper">
 <input class="file-path validate" type="text">
</div>
<button class="waves-effect waves-light btn teal" type="submit">Upload</button>
</div>
</form>

那么我的观点有

set.seed(42)
n <- 1412
dat <- data.frame(pwd=rbinom(n, 1, .25), sendwd=rbinom(n, 1, .25))

我想知道为什么它返回错误(?)。

3 个答案:

答案 0 :(得分:0)

我添加了

if request.method == 'GET':
        return render(request, template)

它运行成功

答案 1 :(得分:0)

@highcenbug您的views.py文件中仍然存在一项更正。 您需要使用quotechar。

   for column in csv.reader(io_string, delimiter=',', quotechar="|"):

答案 2 :(得分:0)

这是这个 MultiValueDictKeyError 的真正含义(摘自 Django 文档本身):

QueryDict.__getitem__(key)
Returns the value for the given key. If the key has more than one value, it returns the last value. Raises django.
utils.datastructures.MultiValueDictKeyError if the key does not exist. (This is a subclass of
Python’s standard KeyError, so you can stick to catching KeyError.) 

简单地说,这意味着 django 系统表示您在代码中提到的键值不存在。

这是/home/user/.virtualenvs/you_virtual_envirenment_name/lib/python3.8/site-packages/django/utils/datastructures.py中datastructures.py文件的一部分代码:

def __getitem__(self, key):
        """
        Return the last data value for this key, or [] if it's an empty list;
        raise KeyError if not found.
        """
        try:
            list_ = super().__getitem__(key)
        except KeyError:
            raise MultiValueDictKeyError(key)
        try:
            return list_[-1]
        except IndexError:
            return []

以上方法是datastructures.py中字典键的getitem方法

参考:

<块引用>

Django 文档 PDF 版本第 6 章 API 参考,第 1326 页。

我不太记得我是怎么下载的,但我去了官方文档网站,有一个选项可以下载为 pdf

感谢您阅读我的回答。

https://docs.djangoproject.com/en/3.1/