2013-12-24 7 views
1

Я использую Reportlab с Django для генерации pdf данных, вычисленных на стороне клиента.Открытие PDF-файла, созданного Reportlab в Django с использованием Ajax

Ajax выбран потому, что у клиента есть нетривиальные данные для передачи в формате pdf.

$.ajax({ 
    type:'POST', 
    url:document.URL + '/export', 
    data: JSON.stringify(data), 
    dataType:'json', 
    contentType:'application/pdf', 
    success:function(data){ 
     // Question 1. What should I insert here to download pdf? 
    }, 
    error:function(e){ 
     ... 
    } 
}); 

А вот view.py

def export(request, *args, **kwargs): 

    // Perform Ajax check 
    ... 

    response = HttpResponse(content_type='application/pdf') 
    response['Content-Disposition'] = 'attachment; filename="essay.pdf"' 

    p = canvas.Canvas(response, bottomup=0) 
    data = json.loads(request.body) 

    p.drawString(100, 100, "Hello world.") 
    p.showPage() 
    p.save() 
    return response 

Вопрос 2. Я не мог получить Аякса, чтобы добиться успеха с его запросом, только вызывая функцию обратного вызова ошибки. Тот же вопрос был передан в этом вопросе

ReportLab in Django

, но не ответил. Я что-то упускаю?

ответ

0

Моим решением было бы использовать стандартную форму вместо ajax.

Вы можете поставить форму в вашем HTML (или построить его с помощью JS)

<form id="my_form" action="export" method="post"> 
    <input id="my_form_data" type="hidden" name="data" /> 
</form> 

Затем, когда вы хотите, чтобы ваши данные, отправленные с помощью JS:

$('#my_form_data').value(JSON.stringify(data)); 
$('#my_form').submit(); 
1

Вы не можете скачать файл через ajax. Но вы можете использовать эту библиотеку: jquery.fileDownload.

jQuery File Download - это плагин jQuery, совместимый с кросс-платформой, который позволяет использовать Ajax-подобный процесс загрузки файлов, который обычно невозможен с использованием Интернета.

Смежные вопросы