提问者:小点点

django在/'file'处引发MultiValueDictKeyError


我试图创建一个视图来上传一个。csv文件并在模板上解析它,但是它返回了一个

MultiValueDictKeyError at /

“文件”

null

模板具有

<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>

null

null

那么我的观点

import csv, io
from django.shortcuts import render
from django.contrib import messages

def data_upload(request):
    template = "home.html"

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

    csv_file = request.FILES['file']
    if not csv_file.name.endswith('.csv'):
        messages.error(request, 'Please upload a .csv file.')

    data_set = csv_file.read().decode('UTF-8')
    io_string = io.StringIO(data_set)
    next(io_string)
    for column in csv.reader(io_string, delimiter=',', quoteschar="|"):
        _, created = Table.objects.update_or_create(
            page=column[0], 
            keyword=column[1], 
            interval=column[2], 
            email=column[3], 
            billing=column[4], 
            notes=column[5],
        )
    context = {}
    return render(request, template, context)

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


共2个答案

匿名用户

我补充道

null

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

匿名用户

@highcenbug您的views.py文件中仍有一处更正。你需要使用Quotechar。

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