Как принять django.http.Объект HttpResponse, содержащий файл csv в Ajax?

#django #ajax

#django #ajax

Вопрос:

Когда я нажимаю кнопку на HTML-странице, я хочу запустить запрос в серверной базе данных, создав csv-файл, специфичный для запроса, а затем загрузить его.

Мне удалось передать данные django , однако я не могу найти способ запустить загрузку, когда нажимаю кнопку, и я не знаю, как заставить ajax accept django.http.HttpResponse содержать csv.

Между тем я нахожу, что все в порядке, если я посещаю URL напрямую, но когда я использую ajax , это не так.

Для иллюстрации,

Мой urls.py :

 url('export/',views.export)
 

Мой views.py :

 def export(request):
    if request.method == 'GET':

        export_list = json.loads(request.GET['id_list'])

        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'
        
        writer = csv.writer(response)
        writer.writerow(['column_1','column_2'])

        for id in export_list:
            item = Item.objects.get(id=id)
            witer.writerow([item.attr_1,item.attr_2])

        return response
 

И мой html

 <a class="btn btn-primary" id="export" rel="external nofollow" role="button" style="margin-left: 30px;">export to csv</a>

$("#export").click( function(){
    data.id_list = JSON.stringify(paperids);
    data.csrfmiddlewaretoken = '{{ csrf_token }}';
    $.ajax({
            url: '/export/',
            type: 'GET',
            data: data,
            dataType: "text/csv",
            headers:{ 'Accept': 'text/csv','Content-Type': 'text/csv' };
            success: function(result){
                console.log(result);
            },
            error: fucntion(){
                console.log("why");
            }
    })

 

Как я могу управлять загрузкой csv при нажатии кнопки?

Ответ №1:

Я считаю, что не Ajax могу обработать запрос на загрузку. Теперь я отправляю данные через hidden input in a form и вместо этого возвращаю ответ на загрузку.