【发布时间】:2012-05-21 22:07:22
【问题描述】:
使用 Django,我想让一些数据可供下载。
到目前为止,我的 jQuery 调用如下所示:
$.getJSON("/get_data",
{ users: users, study: "{{study.id}}" } ,
function(json){
alert('some data!');
}
);
这会调用我的一个 Django 视图,该视图会生成一些 JSON 并尝试将该 JSON 文本放入文件中以供下载
jsonResponse = json.dumps(data, cls=DjangoJSONEncoder)
jsonFile = cStringIO.StringIO()
jsonFile.write(jsonResponse)
response = HttpResponse(jsonFile, mimetype='application/json')
response['Content-Disposition'] = 'attachment; filename=data.txt'
return response
但是,这不起作用。看了一会后,我认为我应该在两端进行一些更改——Javascript 和 python/Django 代码——但我不清楚具体是什么。
对于 Python,我主要关心的是 cStringIO 的使用(尤其是在返回之前我无法在没有提示“ValueError: I/O operation on closed file”的情况下对 jsonFile 执行关闭)。
也许我也应该使用 FileWrapper(就像在这个 post 中一样),但无论有没有它,我都会得到相同的结果。
对于 Javascript,我不确定应该在我的成功处理函数中添加什么。
任何指针将不胜感激!
【问题讨论】:
-
您想让用户看到文件下载对话框(保存、运行取消)还是只是想发送 JSON 数据以供 javascript 使用?
-
前者 - 我想弹出一个“保存”浏览器对话框(据我了解,这应该与“Content-Disposition”标题一起发生,对吗?)
-
@amp,强制下载,而不是浏览器内渲染。强制保存文件似乎不是我们可以做的事情......例如,我所有的下载都直接进入我的下载目录。谷歌搜索显示类似的陈述......
标签: jquery python django download