代码之家  ›  专栏  ›  技术社区  ›  Daniel Ozean

以Django作为附件输出PDF并重新加载

  •  1
  • Daniel Ozean  · 技术社区  · 14 年前

    我使用django生成一个pdf并在视图中作为附件返回响应。

    response = HttpResponse(mimetype='application/pdf')
    response['Content-Disposition'] = 'attachment; filename=somefilename.pdf'
    

    类似于文档中描述的方式 (http://docs.djangoproject.com/en/dev/howto/outputting-pdf/#write-your-view

    重新加载页面的最佳方法是什么?

    $('#the_form').submit(function(){
      location.reload();
    });
    

    谢谢, 丹尼

    2 回复  |  直到 14 年前
        1
  •  1
  •   Martin Thurau    14 年前

    不要重新加载。而是创建一个作为表单目标的视图。该视图在一个从真正的web服务器传递过来的目录中生成PDF,然后将用户发送到适当的URL,在那里他可以下载文件(使用HttpResponseRedirect)。

        2
  •  0
  •   knutin    14 年前

    只需将表单目标设置为生成pdf的视图。下面我介绍了这种方法与Martin建议的方法的优缺点(将文件写入一个世界可以读取的目录)

    • 你可以做认证或特殊的帐单或其他

    欺骗:

    • 每个请求都将生成一个新的PDF
    • 内存使用

    --

    另一个解决方案是使用web服务器的X-SendFile头。在google上搜索特定服务器的说明。一般的想法是,您的视图为web服务器提供一个指向文件的路径,然后web服务器将直接从磁盘读取该文件并返回给用户。您甚至可以“强制下载”这些文件,查看有关如何执行此操作的Web服务器文档。