Django - 无需重新加载页面即可下载文件

时间:2017-03-30 22:56:30

标签: ajax django pdf download

流程看起来像这样:

  1. 用户填写表格
  2. 表单由ajax
  3. 传递给服务器
  4. 表单保存到db,然后创建带有表单数据的pdf并保存在app文件夹中(这可能是一个不好的举动......)
  5. ajax成功导致页面附加一个“Download”按钮,其值等于当前pdf的名称,因此按钮“Download”显示给用户
  6. 如果用户按下按钮,那么刚下载的pdf就会下载。
  7. 刷新页面会使按钮消失。
  8. 我遇到了第5点。我创建了另一个绑定到“下载”按钮的ajax(以避免重新加载页面)。它正确地要求服务器查找文件,创建一个django File对象:pdf_file = File(open(file_path, 'rb')) 并创建一个HttpResponse文件,content_type='application/pdf''application/download'response['Content-Disposition']attachment

    然后ajax返回响应 - 只有它没有。服务器不会引发错误,但会调用ajax错误函数。

    我读过用ajax下载是不可能的。你能帮助我一点点吗?如果上面的代码片段不清楚,我将提供更多代码。 Python 3.5,Django 1.10

2 个答案:

答案 0 :(得分:3)

喜欢

window.location.href = "/url/to/downloadfile/"
发布表单成功后,在javascript

。 OR

#html
<button onclick="myfiledownload()">Download</download>
#javascript
function myfiledownload(){
    window.location.href = "/url/to/downloadfile/"
}

答案 1 :(得分:1)

而不是使用ajax下载文件将按钮绑定到可以托管文件的下载链接

https://www.mywebsite/download/?fileid=3247023

您至少应该在媒体根目录中分隔您的文件 注意:在生产中,您必须使用cdn来托管静态文件