python - 输出 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 中的标题没有设置字符集参数。
解决方案
我终于解决了检查网上其他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
推荐阅读
- c - TSP with vertices may be visited more than once
- php - Multiple WooCommerce Session for one user
- android - Android Firebase 身份验证:联合 Google 登录在 Oreo 中不起作用
- python-2.7 - numpy.transpose for producing mirror images
- jquery - jquery ajax url路径问题
- ruby-on-rails - 为什么这个 simple_fields_for 不执行?
- google-app-engine - 无法从托管在不同 GCP 项目中的 App Engine 柔性环境通过 unix 套接字连接到 Cloud SQL
- node.js - Node.js 发出包含数组的数据?
- google-bigquery - 如何组合两个表,以便新表只有第一个的新记录和第二个的所有其余记录?
- mysql - 如何在服务器上的所有数据库中的所有表上授予 Select?