For my personal website, I want to have a separate page just for my résumé, which is a PDF. I've tried multiple ways, but I can't figure out how to get flask to handle a PDF.
相关问题
- how to define constructor for Python's new Nam
- streaming md5sum of contents of a large remote tar
- How to get the background from multiple images by
- Evil ctypes hack in python
- Correctly parse PDF paragraphs with Python
If your trying to do your typical
where the user clicks on the link and the pdf is downloaded, you need to put your documents in your static folder.
then you end up with something like:
A note for anyone that came to this question because they're trying to serve PDF files from a database with Flask. Embedding a PDF when the file is stored on a database isn't as simple as when it's in the static folder. You have to use the
make_response
function and give it the appropriate headers so the browser knows what to do with your binary PDF data, rather than just returning it from the view function like normal. Here's some pseudocode to help:You can change the Content-Disposition from 'inline' to 'attachment' if you want the file to download rather than display in the browser. You could also put this view in a subdomain, e.g. docs.yourapp.com rather than yourapp.com/docs. The last step is to actually embed this document in the browser. On any page you'd like, just use rawrgulmuffin's strategy:
You could even make the src dynamic with a Jinja2 template. Let's put this in doc.html (note the curly brackets):
Then in a view function, you just return the rendered template with the appropriate doc_id:
This embeds a document the user requested from a database with a simple GET request. Hope this helps anyone working with lots of PDFs in a database!
You can use flask
send_file
orsend_static_file
function in 5 lines:This snippet link is helpful
Also can use
send_from_directory
if you want send file from certain directory:read more about
send_from_directory
You have two options. You can either render a template that uses a static PDF file or render a template that generates a PDF. I'd personally go with the first option.
This SO question is dedicated to how to write an HTML page that returns a PDF. You can use this in your jinja2 template.
Here's a quick and dirty way to get it done.
Or, you can create a jinja2 template which sets all the headers required to return a PDF and then say,
with a view function called static that returns the pdf.
You can read more about the second option at this flask snippet