标题:django生成csv文件 | 作者: catfish | 时间:2019年12月26日
暂无法显示图片

生成小的csv文件

import csv
from django.http import HttpResponse

def some_view(request):
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'

    writer = csv.writer(response)
    writer.writerow(['First row', 'Foo', 'Bar', 'Baz'])
    writer.writerow(['Second row', 'A', 'B', 'C', '"Testing"', "Here's a quote"])

    return response

将csv定义成模板

from django.http import HttpResponse
from django.template import loader

def some_view(request):
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'
    context = {
        'rows' : [
            ['username', 'age'],
            ['zhiliao', 18]
        ]
    }
    template = loader.get_template('abc.txt')
    csv_tempate = template.render(context)
    response.content = csv_template
    return response

abc.txt内容如下:

{% for row in rows %}{{ row.0 }}{{ row.1 }}
{% endfor %}

生成大的csv文件

def large_csv_view(request):
    response = StreamingHttpResponse(content_type='text/csv')
    response['Content-Disposition'] = "attachment;filename=large.csv"
    row = ("Row {},{}\n".format(row,row) for row in range(0,1000000))
    response.streaming_content = rows
    return response

关于StreamingHttpResponse和HttpResponse的区别

1,这个类没有属性content,相反是streaming_content。

2,这个类的streaming_content必须是一个可以迭代的对象。

3,这个类没有write方法,如果给这个类的对象写入数据将报错

注意:StreamingHttpResponse会启动一个进程来和客户端保持长连接,所以会很消耗资源,所以如果不值特殊要求,尽量少用这种方法。

我要评论

没有登录?请先登录后再评论

最新评论

暂无人评论,来抢个沙发吧!