generating a file with django to download with javascript/jQuery
django, download, jquery, python
Solution
The classic solution for this is to use an hidden `iframe`.
In your `urls.py`
url(r'^test/getFile', 'getFile')
In your `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
On your page
<script type="text/javascript">
var data = {name: 'Jon'};
$(function(){
$("body").append('<iframe src="/test/getFile?'+ $.param(data) + '" style="display: none;" ></iframe>');
});
</script>
Problem
Using Django, I want to make some data available for download. My jQuery call looks like this so far: ``` $.getJSON("/get_data", { users: users, study: "{{study.id}}" } , function(json){ alert('some data!'); } ); ``` This calls one of my Django views, which in turn generates some JSON and attempts to make that JSON text in a file to download ``` 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 ``` However, this does not work. After looking around for a while, I believe I should change something on both ends – the Javascript and the python/Django code – but I'm unclear what exactly. For Python, my main concern is in the use of cStringIO (especially the fact that I cannot execute close on jsonFile before returning without prompting a "ValueError: I/O operation on closed file"). Maybe I should also be using a FileWrapper (like in this post), but I get identical results with and without it. For Javascript, I'm not sure what should go into my success handler function. Any pointers would be greatly appreciated!