将 csv 内容传递给模板。并得到错误。谢谢
def ....
with open('csv', 'rb') as f:
reader = csv.reader(f)
return render(request, template, {"results": reader})
错误
I/O operation on closed file
with
引入了一个新的上下文管理器,在文件的情况下,它负责在文件结束后关闭它的参数。但是,您的上下文管理器在下一行结束,因此在render
调用该函数时,文件已关闭,并且 csv 阅读器无法操作。
您可能只是将return
一个缩进向右移动,或者更好地在其中调用 render ,with
但将其保存到您随后传递给的变量中return
:
with open('csv', 'rb') as f:
reader = csv.reader(f)
html = render(request, template, {"results": reader})
return html
问题是您将阅读器对象传递给模板(您在其中迭代它),但是由于它不在with
块中,因此文件已关闭。
为了纠正这种情况,一种方法是将生成器转换为一些可迭代的序列。
例如:
def foo(request):
lines = []
with open('foo.csv', 'rb') as f:
lines = [line for line in csv.reader(f)]
return render(request, template, {'results': lines})