2016-03-14 4 views
1

Я пытаюсь создать файл excel на сайте Django, поэтому я искал его и смотрю this example. Я пишу просто функцию, которая пишет то, что мне нужно, в файл Excel;Django HttpResponse Excel

def create_excel(personal_information): 

    output = StringIO.StringIO() 
    book = xlsxwriter.Workbook(output) 

    sheet = book.add_worksheet() 

    if personal_information['name']: 
     sheet.write(1, 1, personal_information['name'], text_format) 

    book.close() 
    output.seek(0) 

    return output 

На мой взгляд.py;

def export(request): 
    personal_information = json.loads(request.POST.get('personal_data')) 

    output = create_excel(personal_information) 
    response = HttpResponse(output.read(), content_type="application/ms-excel") 
    response['Content-Disposition'] = 'attachment; filename=Excel.xls' 

    return response 

Однако это дало «None». У вас есть идея решить мою проблему?

спасибо.

+1

Что произойдет, если вы 'печать output' перед визуализацией ответ? Правильно ли формируется выход? Кроме того, правильно ли оформлен ваш оператор «return response»? Это не похоже на вопрос ... – rnevius

+0

@rnevius Да Я не могу скопировать и вставить код правильно, но в моем исходном коде проблема с отступом отсутствует. Когда я печатаю вывод перед его возвратом, он дает «». И когда я его отлаживаю, я вижу содержание ответа, которое имеет некоторые неизвестные цифры. – waterkinq

+0

Также мне нужно сказать, что я пытаюсь получить файл excel с помощью кнопки во всплывающем окне. Я имею в виду, может быть, мне нужно справиться с этим? – waterkinq

ответ

1

Попробуйте это: в вашей функции create_excel:

output  = io.BytesIO() 
workbook = xlsxwriter.Workbook(output) 
     .... your code ..... 
      at the end of your function 
# close workbook 
workbook.close() 
xlsx_data = output.getvalue() 
return xlsx_data 

на ваш взгляд:

if request.method == 'POST': 
    response = HttpResponse(content_type='application/vnd.ms-excel') 
    response['Content-Disposition'] = 'attachment; 
filename=your_template_name.xlsx' 
    xlsx_data = create_excel() 
    response.write(xlsx_data)