Django使用AJAX下载Excel文件

时间:2018-08-03 15:27:03

标签: python ajax django

我有一个问题,就是找不到适合自己需求的解决方案。

当我单击按钮时,我接到了这个AJAX呼叫:

$.ajax({
                    type: 'POST',
                    url: '{% url "tests" %}',
                    traditional: true,
                    data : {'mydata': list,"excel": "" },
                    success: function (data, textStatus) {
                        //Test
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown) {
                        alert("some error " + String(errorThrown) + String(textStatus) + String(XMLHttpRequest.responseText));
                    }
                });

在views.py中:

if request.method == "POST" and request.is_ajax():
        if 'excel' in request.POST:
            data = request.POST.getlist('mydata')
            if data:
                tests = Test.objects.filter(pk__in=data)
                response = HttpResponse(content_type='application/vnd.ms-excel')
                response['Content-Disposition'] = 'attachment; filename=Test.xlsx'
                xlsx_data = WriteToExcelTests(tests)
                response.write(xlsx_data)
                return response

如果我不使用AJAX(因为在我不使用AJAX的情况下还有另一种情况)并且文件已在浏览器中下载,则此方法很好,但是在这种情况下我无法下载文件,它不能任何错误,但不会下载文件。

如何强制它下载文件?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。多亏了这个答案https://stackoverflow.com/a/47197970/9446730和一点点的搜索,我才这样解决了它:

putImageData

我们无法使用blogpost中提到的Jquery Ajax下载文件。