Outputting CSV with Django
February 27, 2011
I wanted to output some data from my Django site, offering it as a CSV download. I did this using the Django template system.
Template
Here's the template used, which is a simple for loop.
{% for result in ContestResults %} "{{ result.contest_event.event_date }}","{{ result.contest_event.name }}","{{result.band_name}}" {% endfor %}
Next, we need to render this template into a string in the view:
lCsvFile = render_to_string('bands/results.csv', { "ContestResults" : lContestResults, })
Finally, we set up the response and return the file.
lResponse = HttpResponse(mimetype="text/csv") lResponse['Content-Disposition'] = "attachment; filename=%s.csv" % lBand.slug lResponse.write(lCsvFile) return lResponse
The Content-Disposition
header causes the browser to download the file rather than display it like a web page. We can dynamically control the default filename - here we're using the slug as the filename.