因为我刚接触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的角度来看,我觉得它很好看,但也许它与重定向有关?全部答案
答案 0 :(得分:0)
request.FILES["csv_file"]
正在返回InMemoryUploadedFile
个对象,csv.reader
不知道如何处理这样的对象。我相信你需要调用对象的read
方法:handle_files(csv_file.read())
。请注意文档中的warning:“请注意这种方法:如果上传的文件太大,如果您尝试将其读入内存,它可能会使您的系统崩溃。您可能希望使用块();见下文。“