【问题标题】:How to make browser to download the Django CSV file response如何让浏览器下载 Django CSV 文件响应
【发布时间】:2012-12-06 18:13:44
【问题描述】:

我正在关注 Django 文档 here 创建一个 CSV 文件。在我的 urls.py 中有url(r'^reports/csv_list_report/$', 'csv_list_report')

我希望用户在单击下载按钮时下载 CSV 文件。所以我在这里使用jQuery:

$('#download_button').click(function(){
    $.get('/reports/csv_list_report/');
});

我可以在firebug中看到响应,但是浏览器没有下载文件。

这是我的看法:

def csv_list_report(request):
    response = HttpResponse(mimetype='text/csv')
    response['Content-Disposition'] = 'attachment; filename="reports.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

所以也许在 GET 之后我需要写一些东西来处理成功的响应?搜索了一下,有很多关于如何创建 CSV 文件的答案,但没有找到任何答案,包括处理响应需要做什么。

【问题讨论】:

  • 如果你只是想下载文件,为什么要尝试使用 jQuery?
  • 它是通过点击事件触发的。我希望用户在单击下载按钮时下载文件。我将编辑我的问题。

标签: python django csv


【解决方案1】:

您不能让浏览器通过 AJAX 下载文件(当您使用 $.get 时,jQuery 就是这样做的)。您必须建立直接同步 HTTP 连接。

不要使用$.get,试试这个:

location.replace('/reports/csv_list_report/');

相关: Force download through js or query

【讨论】:

  • 太好了,这就是问题所在。干杯!
  • 从浏览器控制台“资源解释为文档但使用 MIME 类型文本/csv 传输:”会不会是一个问题
  • 我认为这只是 Chrome 的行为,看来您可以忽略它,请参阅:stackoverflow.com/questions/3899426/…
猜你喜欢
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多