HttpResponseオブジェクトのmimetypeとContent-Dispositionを適切に設定します。
response = HttpResponse(my_data, mimetype='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=foo.xls'
from django.http import HttpResponse
import csv
def download(request):
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename=foo.csv'
writer = csv.writer(response)
writer.writerow(['スパム', 'エッグ', 'ベーコン'])
writer.writerow(['spam', 'egg', 'bacon'])
return response