class CSVDownload(View):
""" Prepares CSV file version to download """
#more code here
f = StringIO.StringIO()
writer = csv.writer(f, dialect='excel')
for v in visit_list:
writer.writerow([v.idfa.idfa, v.name, v.duration, v.firstSeen, v.lastSeen, v.identifier, v.closestProximity])
f.seek(0)
response = HttpResponse(f, content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename=AdvertiserData.csv'
return response
由于某些原因,在excel中打开文件时,该文件将只输出列表中的最后一项,请参见
这使我相信每一行都覆盖了第一行。尽管事实并非如此。看看我在航站楼做的这些测试。在
^{pr2}$这将返回多个值,值之间有\r\n
。在
我也试过了
>>> print response
Content-Type: text/csv
Content-Disposition: attachment; filename=boo.csv
FFAC6F6C-1B2E-47C2-8110-5E619B239FB1,PPTest1,00:00:24,2014-11-11 23:20:24.730000,2014-11-11 23:20:48.750000,nkfe-cnb7s,NEAR
FFAC6F6C-1B2E-47C2-8110-5E619B239FB1,moo2,00:00:24,2014-11-11 23:20:24.730000,2014-11-11 23:20:48.750000,nkfe-cnb7s,NEAR
这也显示了不止一个值。在
我最近在这里看到一个讨论添加到文件的SO线程:How do you append to a file? 但是,既然我只在内存中创建这个项目(使用stringIO),那么如何才能获得相同的效果呢?在
谢谢!在
编辑以获取更多信息:
visit_list
受到访问模型的影响:
class Visit(models.Model):
idfa = models.ForeignKey(Report)
name = models.CharField(max_length=255)
lastSeen = models.CharField(max_length=255)
duration = models.CharField(max_length=255)
firstSeen = models.CharField(max_length=255)
identifier = models.CharField(max_length=255)
closestProximity = models.CharField(max_length=255)
def __unicode__(self):
return self.name
class Meta:
verbose_name = "Visit"
verbose_name_plural = "Visits"
在这种情况下,visit_list返回:
>>> visit_list
[<Visit: PPTest1>, <Visit: moo2>]
底线:我怀疑您需要将}。在
f.getvalue()
传递给HttpResponse
,而不是{解释:
^{} prefers strings ,但也可以将其视为文件对象或接受迭代器。然而,
f
是一个StringIO.StringIO
实例,而不是字符串本身。在请考虑以下设置:
现在将
^{pr2}$f
与f.getvalue()
的结果进行比较:现在请注意,
response
对象在将实例传递给HttpResponse
时的区别:请注意,当您将实例传递给
HttpResponse
时,响应的_container
属性为空,但是当您将f.getvalue()
字符串传递给HttpResponse
时,响应的_container
属性为空。在我会试试这个,然后:
相关问题 更多 >
编程相关推荐