首页 > 解决方案 > 输出 CSV 文件而不下载它

问题描述

我正在做一个简单的视图,我希望响应是一个 csv 文件,但我不希望资源管理器下载它。

在这里,我向您展示我给出的回应:

    def csv_response(self, fields, queryset=None, filename=None):
        if not queryset:
            try:
                queryset = self.get_queryset()
            except AttributeError:
                raise ImproperlyConfigured('This method needs to have a queryset configured.')
        if not filename:
            filename = self.__class__
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'inline'

        writer = csv.DictWriter(response, fieldnames=fields.keys(), delimiter=',')
        writer.writeheader()

        for element in queryset:
            writer.writerow({fieldname: getattr(element, field) for fieldname, field in fields.items()})
        return response

我只想让它在任何资源管理器中输出而不是下载它,这甚至可能吗?我认为这是我在互联网上看到的一些。

编辑:我试图改变:

response = HttpResponse(content_type='text/plain', charset='utf-8')

然后输出不会立即下载,但带有重音符号的字符没有正确的符号。我不明白最后一个标准,因为我设置了 charset='utf-8'。作为检查,我看到 de explorer 显示的最终 html 中的标题没有设置字符集参数。

标签: pythondjango

解决方案


我终于解决了检查网上其他csv文件的代码。感谢@Tal,因为他的回答是引导我这样做的人。

代码按我的意愿工作:

    def csv_response(self, fields, queryset=None, filename=None):
        if not queryset:
            try:
                queryset = self.get_queryset()
            except AttributeError:
                raise ImproperlyConfigured('This method needs to have a queryset configured.')
        if not filename:
            filename = self.__class__
        response = HttpResponse()
        response['Content-Type'] = 'text/plain; charset=utf-8'
        response['Content-Disposition'] = 'inline'

        writer = csv.DictWriter(response, fieldnames=fields.keys(), delimiter=',')
        writer.writeheader()

        for element in queryset:
            writer.writerow({fieldname: getattr(element, field) for fieldname, field in fields.items()})
        return response

推荐阅读