码迷,mamicode.com
首页 > 其他好文 > 详细

108:生成和下载csv文件

时间:2019-02-22 01:01:29      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:tac   context   django   pre   userinfo   并且   告诉   file   默认值   

生成CSV文件:

有时候我们做的网站,需要将一些数据,生成有一个CSV文件给浏览器,并且是作为附件的形式下载下来。以下将讲解如何生成CSV文件。

生成小的CSV文件:

这里将用一个生成小的CSV文件为例,来把生成CSV文件的技术要点讲到位。我们用Python内置的csv模块来处理csv文件,并且使用HttpResponse来将csv文件返回回去。示例代码如下:

from django.http import HttpResponse, JsonResponse
import json, csv


def small_csv(request):
    response = HttpResponse(content_type=text/csv)
    response[Content-Disposition] =  "attachment;filename=‘userinfo.csv‘"
    my_write = csv.writer(response)
    my_write.writerow([username,age])
    my_write.writerow([tom,21])
    my_write.writerow([jack,22])
    return response

这里再来对每个部分的代码进行解释:

  • 我们在初始化HttpResponse的时候,指定了Content-Type为text/csv,这将告诉浏览器,这是一个csv格式的文件而不是一个HTML格式的文件,如果用默认值,默认值就是html,那么浏览器将把csv格式的文件按照html格式输出,这肯定不是我们想要的。
  • 第二个我们还在response中添加一个Content-Disposition头,这个东西是用来告诉浏览器该如何处理这个文件,我们给这个头的值设置为attachment;,那么浏览器将不会对这个文件进行显示,而是作为附件的形式下载,第二个filename="somefilename.csv"是用来指定这个csv文件的名字。
  • 我们使用csv模块的writer方法,将相应的数据写入到response中。

csv文件定义成模板:

我们还可以将csv格式的文件定义成模板,然后使用Django内置的模板系统,并给这个模板传入一个Context对象,这样模板系统就会根据传入的Context对象,生成具体的csv文件。示例代码如下:

模板文件:

# 文件路径是:工程template目录下:
{% for row in rows %}{{ row.0 }},{{ row.1 }}
{% endfor %}

视图函数:

def template_csv(request):
    resp = HttpResponse(content_type=text/csv)
    resp[Content-Disposition] = "attachment;filename=‘templateinfo.csv‘"
    context = {
        rows:
            [
                [username, age],
                [bob,19],
                [marry, 20],
            ]
    }
    template =loader.get_template(template.txt)
    csv_template = template.render(context)
    resp.content = csv_template
    return resp

 

108:生成和下载csv文件

标签:tac   context   django   pre   userinfo   并且   告诉   file   默认值   

原文地址:https://www.cnblogs.com/zheng-weimin/p/10415876.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!