Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以Django作为附件输出PDF并重新加载_Django_Pdf Generation_Reload - Fatal编程技术网

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

以Django作为附件输出PDF并重新加载,django,pdf-generation,reload,Django,Pdf Generation,Reload,我正在使用django生成pdf,并将响应作为附件返回到视图中 response = HttpResponse(mimetype='application/pdf') response['Content-Disposition'] = 'attachment; filename=somefilename.pdf' 与文档中描述的方式类似) 重新加载页面的最佳方式是什么 这不起作用(表单触发pdf生成): 非常感谢, Danny不要重新加载。而是创建一个作为表单目标的视图。视图在一个目录中生成P

我正在使用django生成pdf,并将响应作为附件返回到视图中

response = HttpResponse(mimetype='application/pdf')
response['Content-Disposition'] = 'attachment; filename=somefilename.pdf'
与文档中描述的方式类似)

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

这不起作用(表单触发pdf生成):

非常感谢,
Danny不要重新加载。而是创建一个作为表单目标的视图。视图在一个目录中生成PDF,该目录从真实的web服务器发送,然后将用户发送到相应的URL,用户可以在那里下载文件(使用HttpResponseRedirect)。

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

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

优点:

  • 您可以进行身份验证或特殊计费或其他任何操作
  • 每个请求都将生成一个新的PDF(除非您显式缓存它)
缺点:

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


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

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

优点:

  • 您可以进行身份验证或特殊计费或其他任何操作
  • 每个请求都将生成一个新的PDF(除非您显式缓存它)
缺点:

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


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

谢谢Martin。这是一个很好的选择。是否仍然可以将PDF作为附件返回?我决定实施Martin建议的方法。谢谢你,谢谢马丁。这是一个很好的选择。是否仍然可以将PDF作为附件返回?我决定实施Martin建议的方法。谢谢。我将表单目标发送到生成pdf的视图,并获取附件作为响应
def some_view(请求):response=HttpResponse(mimetype='application/pdf')response['Content-Disposition']='附件;filename=somefilename.pdf'。。。返回响应
,但返回响应后页面不会重新加载。Aha。我懂了。好的,当您使用javascript在表单提交上执行操作时,它将在表单实际提交之前运行,因此您不能在那里进行任何重新加载或重定向。我能想到的最简单的解决方案是在提交处理程序中调用window.setTimeout(function(){window.location='/your/url/'},timeout_in_毫秒),但这确实是一个相当难看的黑客行为。我将表单目标发送到生成pdf的视图,并将附件作为响应
def some_view(请求):response=HttpResponse(mimetype='application/pdf')response['Content-Disposition']='附件;filename=somefilename.pdf'。。。返回响应
,但返回响应后页面不会重新加载。Aha。我懂了。好的,当您使用javascript在表单提交上执行操作时,它将在表单实际提交之前运行,因此您不能在那里进行任何重新加载或重定向。我能想到的最简单的解决方案是在提交处理程序中调用window.setTimeout(function(){window.location='/your/url/'},timeout(以毫秒为单位)),但这确实是一个相当丑陋的攻击。
$('#the_form').submit(function(){
  location.reload();
});