Поскольку байт по стандартному определению составляет 8 битов, которые могут представлять 256 значений (от 0 до 255).
аккуратная упаковка! я не знал об этом
Согласно документу, метод save (filename_or_stream)
принимает либо имя файла для сохранения, либо файловый поток для записи.
И Объект ответа Django оказывается файловым потоком! так что просто сделайте xls.save (response)
. Посмотрите документацию Django о создании PDF-файлов с помощью ReportLab, чтобы увидеть аналогичную ситуацию.
edit: (адаптировано из комментария ShawnMilo):
def xls_to_response(xls, fname):
response = HttpResponse(mimetype="application/ms-excel")
response['Content-Disposition'] = 'attachment; filename=%s' % fname
xls.save(response)
return response
затем из вашей функции просмотра просто создайте xls
и закончите с помощью
return xls_to_response(xls,'foo.xls')
Вы можете сохранить свой XLS-файл в объекте StringIO , который похож на файл.
Вы можете вернуть getvalue () объекта StringIO ()
в ответ. Не забудьте добавить заголовки, чтобы пометить ее как загружаемую электронную таблицу.
Если для результата ваших данных не нужны формулы или точные стили представления, вы всегда можете использовать CSV. любая программа для работы с электронными таблицами прочитала бы его напрямую. Я даже видел некоторые веб-приложения, которые генерируют CSV, но называют его .XSL, чтобы убедиться, что Excel его откроет
Вы можете проверить huDjango , который поставляется с функцией, называемой сериализаторами .
*** Обновление: шаблоны Django-Excel больше не поддерживаются, вместо этого попробуйте Marmir http://brianray.github.com/mm/
Все еще в разработке Я набираю это, но http://code.google.com/p/django-excel-templates/ Проект Django Excel Projects стремится сделать то, что вы спрашивают.
Специально посмотрите на тесты. Вот простой случай:
#
from django_excel_templates import *
from django_excel_templates.color_converter import *
from models import *
from django.http import HttpResponse
def xls_simple(request):
## Simple ##
testobj = Book.objects.all()
formatter = ExcelFormatter()
simpleStyle = ExcelStyle(vert=2,wrap=1)
formatter.addBodyStyle(simpleStyle)
formatter.setWidth('name,category,publish_date,bought_on',3000)
formatter.setWidth('price',600)
formatter.setWidth('ebook',1200)
formatter.setWidth('about',20000)
simple_report = ExcelReport()
simple_report.addSheet("TestSimple")
filter = ExcelFilter(order='name,category,publish_date,about,bought_on,price,ebook')
simple_report.addQuerySet(testobj,REPORT_HORZ,formatter, filter)
response = HttpResponse(simple_report.writeReport(),mimetype='application/ms-excel')
response['Content-Disposition'] = 'attachment; filename=simple_test.xls'
return response