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

时间:2010-10-27 06:25:50

标签: django pdf-generation reload

我使用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

中描述的方式类似

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

这没有用(表单触发pdf生成):

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

非常感谢, 丹尼

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

优点:

  • 您可以进行身份​​验证或特殊结算或其他任何
  • 每个请求都会生成一个新的PDF(除非您明确缓存它)

缺点:

  • 每个请求都会生成一个新的PDF
  • 内存使用
  • 您必须从Django
  • 流式传输文件

-

另一种解决方案是使用网络服务器的X-SendFile标头。谷歌搜索您的特定服务器的说明。一般的想法是,您的视图为Web服务器提供了一个文件的路径,然后Web服务器将直接从磁盘读取并返回给用户。您甚至可以“强行下载”这些文件,查看您的网络服务器的文档,了解如何操作。