如何使烧瓶发送文件,然后重定向?

问题描述 投票:1回答:2

我希望我的烧瓶应用程序发送文件,然后重定向到主页。

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文件是使用StringIoPdfFileWriter对象动态生成的。

python pdf flask
2个回答
1
投票

您可以使用“/”路径返回一个带有javascript的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()

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 }}';
© www.soinside.com 2019 - 2024. All rights reserved.