Skip to main content
 首页 » 编程设计

python之django 输出空 csv

2025年05月04日6TianFang

我正在使用 django,我正在尝试将 CSV_data 列表导出到 csv 文件中。下面是我的 csv.py:

#coding=utf-8 
from django.http import HttpResponse 
from django.template import loader, Context 
from demo.views import CSV_data 
 
 
def output(request, filename): 
    response = HttpResponse(mimetype='text/csv') 
    response['Content-Disposition'] = 'attachment; filename=%s.csv' % filename 
 
    t = loader.get_template('csv.txt') 
    c = Context({ 
        'data': CSV_data, 
    }) 
    response.write(t.render(c)) 
    return response 

CSV_data是views.py中的一个变量,我试过在template中打印出来,值是可以的。

 [(u'2012-06-01', [0, 0, 0]), ('2012-06-08', [0, 0, 0]), ('2012-06-15', [0, 0, 0]),    ('2012-06-22', [0, 0, 0]), ('2012-06-29', [0, 0, 0]), ('2012-07-06', [0, 0, 0]), ('2012-07-13', [0, 0, 0]), ('2012-07-20', [0, 0, 0]), ('2012-07-27', [0, 0, 0]), ('2012-08-03', [131, 164, 79.88]), ('2012-08-10', [110, 198, 55.56]), ('2012-08-17', [112, 197, 56.85]), ('2012-08-24', [147, 283, 51.94]), ('2012-08-31', [0, 306, 0.0]), ('2012-09-07', [418, 418, 100.0]), ('2012-09-14', [342, 342, 100.0]), ('2012-09-21', [732, 732, 100.0]), ('2012-09-28', [689, 689, 100.0]), ('2012-10-05', [775, 775, 100.0]), ('2012-10-12', [469, 469, 100.0]), ('2012-10-19', [477, 477, 100.0]), ('2012-10-26', [897, 897, 100.0]), ('2012-11-02', [216, 216, 100.0]), ('2012-11-09', [1046, 1046, 100.0]), ('2012-11-16', [840, 840, 100.0]), ('2012-11-23', [948, 948, 100.0])] 

但是,生成的 csv 始终为空。

我尝试将 CSV_data 定义添加到 csv.py 文件中,如下所示:

#coding=utf-8 
from django.http import HttpResponse 
from django.template import loader, Context 
 
CSV_data = [(u'2012-06-01', [0, 0, 0]), ('2012-06-08', [0, 0, 0]), ('2012-06-15', [0, 0, 0]), ('2012-06-22', [0, 0, 0]), ('2012-06-29', [0, 0, 0]), ('2012-07-06', [0, 0, 0]), ('2012-07-13', [0, 0, 0]), ('2012-07-20', [0, 0, 0]), ('2012-07-27', [0, 0, 0]), ('2012-08-03', [131, 164, 79.88]), ('2012-08-10', [110, 198, 55.56]), ('2012-08-17', [112, 197, 56.85]), ('2012-08-24', [147, 283, 51.94]), ('2012-08-31', [0, 306, 0.0]), ('2012-09-07', [418, 418, 100.0]), ('2012-09-14', [342, 342, 100.0]), ('2012-09-21', [732, 732, 100.0]), ('2012-09-28', [689, 689, 100.0]), ('2012-10-05', [775, 775, 100.0]), ('2012-10-12', [469, 469, 100.0]), ('2012-10-19', [477, 477, 100.0]), ('2012-10-26', [897, 897, 100.0]), ('2012-11-02', [216, 216, 100.0]), ('2012-11-09', [1046, 1046, 100.0]), ('2012-11-16', [840, 840, 100.0]), ('2012-11-23', [948, 948, 100.0])] 
 
def output(request, filename): 
    response = HttpResponse(mimetype='text/csv') 
    response['Content-Disposition'] = 'attachment; filename=%s.csv' % filename 
 
    t = loader.get_template('csv.txt') 
    c = Context({ 
        'data': CSV_data, 
    }) 
    response.write(t.render(c)) 
    return response 

那么输出的csv不为空。所以我猜从 views.py 导入 CSV_data 时出了点问题。

问题是我已经测试过 View 中的 CSV_data 值是正确的。那么会出现什么问题呢?

********* *******更新**** ************:

views.py 中的原始代码如下:

 CSV_data = [] 
 def part_usage_result(request): 
     ...(details omit) 
     usageDictWeek = helper.getResultByWeek(modelName, spareCode, start, end) #returns a list 
     CSV_data=usageDictWeek 

我改为:

 CSV_data = [] 
 def part_usage_result(request): 
     ...(details omit) 
     usageDictWeek = helper.getResultByWeek(modelName, spareCode, start, end) #returns a list 
     for each in usageDictWeek: 
         CSV_data.append(each) 

现在csv的内容是正确的。 还是不知道为什么会这样

请您参考如下方法:

由于您没有提供 helper.getResultByWeek 详细信息以及它的调用方式,我猜它返回一个带有列表值的全局变量,并且这个变量在两者之间的某个地方被修改。

 CSV_data = usageDictWeek 

不复制列表,而是创建另一个对现有列表的引用。稍后修改原始usageDictWeek时,CSV_data也被修改。

当你这样做的时候

 CSV_data[:] = usageDictWeek  

usageDictWeek 的新副本已创建并分配给 CSV_data。