我希望我的烧瓶应用程序发送文件,然后重定向到主页。
def create_pdf(**kwargs):
page = PdfManager(**kwargs)
pdf_out = page.create_pdf()
response = make_response(pdf_out)
# redirect(url_for('home'))
response.headers['Content-Disposition'] = "attachment; filename=pdf-test.pdf"
response.mimetype = 'application/pdf'
return response
app.route('/', methods=['GET', 'POST'])
def home():
create_pdf(foo='bar')
这段代码在响应时正确地吐出pdf文件,但是在下载pdf文件后我无法刷新页面或重定向。我不能使用send_from_directory
方法,因为这个pdf文件是使用StringIo
,PdfFileWriter
个对象动态生成的。
答案 0 :(得分:1)
您可以使用“/”路径返回一个html响应,例如:
<!DOCTYPE html>
<html lang="en">
<head>
<script>
setTimeout(function(){
document.location = "/redirect-uri";
}, 500)
</script>
</head>
<body>
<iframe width="0" height="0" src="/path-to-pdf.pdf"/>
</body>
</html>
如果动态生成pdf,您还应该像
那样提供pdf网址@route('/path-to-pdf.pdf')
def pdf_generator():
return create_pdf()
答案 1 :(得分:0)
稍微好一点的方法可能是让javascript处理提交表单以及重定向:
<form name="createPdf">
<!-- Your fields etc. here -->
<a href="javascript:submitAndRedirect()">
<button>Submit</button> <!-- NB do not use type=submit -->
</a>
</form>
<script type="text/javascript">
function submitAndRedirect() {
document.createPdf.submit();
setTimeout(function() {
location.href = YOUR_REDIRECT_URL_HERE;
}, 500);
}
</script>
如果需要,可以从python注入redirectUrl,如下所示:
return render_template("create_pdf.html", redirect_url=url_for("whatever"))
然后在你的javascript中:
var redirectUrl = '{{ redirect_url }}';