在Django

时间:2018-05-21 22:11:28

标签: python django csv

因为我刚接触Django而提前道歉(而且我也不得不提高我的Python技能)。我试图做一个简单的例子,通过表单上传文件然后在我的终端中打印行(作为测试,然后再进行一些实际处理)。我的views.py包含以下内容:

def upload_csv(request):
    if "GET" == request.method:
        return render(request, "portal/csvupload.html")
    csv_file = request.FILES["csv_file"]
    handle_files(csv_file)
    return HttpResponseRedirect(reverse("portal:csvupload"))

def handle_files(csvfile):
    csv_reader = csv.reader(csvfile)
    for line in csv_reader:
        print(line)

现在这会返回一条错误消息“ expect str,bytes or os.PathLike object,而不是InMemoryUploadedFile ”,我不确定基于错误消息的代码有什么问题?从Python的角度来看,我觉得它很好看,但也许它与重定向有关?全部答案

1 个答案:

答案 0 :(得分:0)

request.FILES["csv_file"]正在返回InMemoryUploadedFile个对象,csv.reader不知道如何处理这样的对象。我相信你需要调用对象的read方法:handle_files(csv_file.read())。请注意文档中的warning:“请注意这种方法:如果上传的文件太大,如果您尝试将其读入内存,它可能会使您的系统崩溃。您可能希望使用块();见下文。“