art*_*omp 6 python django jquery download
使用Django,我想让一些数据可供下载.
到目前为止,我的jQuery调用看起来像这样:
$.getJSON("/get_data",
{ users: users, study: "{{study.id}}" } ,
function(json){
alert('some data!');
}
);
Run Code Online (Sandbox Code Playgroud)
这会调用我的一个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
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.环顾四周后,我相信我应该改变两端的东西--Javascript和python/Django代码 - 但我不清楚到底是什么.
对于Python,我主要关心的是使用cStringIO(尤其是在返回之前我不能在jsonFile上执行close而不提示"ValueError:对已关闭文件的I/O操作").
也许我也应该使用FileWrapper(就像在这篇文章中一样),但是无论有没有它我都会得到相同的结果.
对于Javascript,我不确定应该进入我的成功处理函数.
任何指针将不胜感激!
对此的经典解决方案是使用隐藏iframe.
在你的 urls.py
url(r'^test/getFile', 'getFile')
Run Code Online (Sandbox Code Playgroud)
在你的 views.py
def getFile(request):
fileContent = "Your name is %s" % request.GET['name']
res = HttpResponse(fileContent)
res['Content-Disposition'] = 'attachment; filename=yourname.txt'
return res
Run Code Online (Sandbox Code Playgroud)
在您的页面上
<script type="text/javascript">
var data = {name: 'Jon'};
$(function(){
$("body").append('<iframe src="/test/getFile?'+ $.param(data) + '" style="display: none;" ></iframe>');
});
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4237 次 |
| 最近记录: |