2017-01-07 46 views
0

私のフラスコのアプリケーションでファイルを送信してから、ホームページにリダイレクトすることができます。フラスコを使ってファイルを送信し、リダイレクトする方法は?

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ファイルをダウンロードした後にリダイレクトすることはできません。このpdfファイルはStringIo,PdfFileWriterのオブジェクトを使用して動的に生成されるので、フラスコのsend_from_directoryメソッドを使用することはできません。

答えて

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のURLを提供しなければなりません
@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> 

必要に応じてredirectUrlは、このようのpythonから注入することができます

return render_template("create_pdf.html", redirect_url=url_for("whatever")) 

次に、あなたのJavaScriptで:

var redirectUrl = '{{ redirect_url }}'; 
関連する問題