First Steps


The easiest way to use Flask-WeasyPrint is to install it in a Python virtual environment. When your virtual environment is activated, you can then install Flask-WeasyPrint with pip:

pip install flask_weasyprint

This will also automatically install Flask-WeasyPrint’s dependencies, Flask and WeasyPrint. Check the relative documentations if you have installationt problems with these packages.


Let’s assume you have a Flask application serving an HTML document at with a print-ready CSS stylesheet. WeasyPrint can render this document to PDF:

from weasyprint import HTML
pdf = HTML('').write_pdf()

WeasyPrint will fetch the stylesheet, the images as well as the document itself over HTTP, just like a web browser would. Of course, going through the network is a bit silly if WeasyPrint is running on the same server as the application. Flask-WeasyPrint can help:

from my_flask_application import app
from flask_weasyprint import HTML
with app.test_request_context(base_url=''):
    # /hello/ is resolved relative to the context’s URL.
    pdf = HTML('/hello/').write_pdf()

Just import flask_weasyprint.HTML() or flask_weasyprint.CSS() from flask_weasyprint rather than weasyprint, and use them from within a Flask request context. For URLs below the application’s root URL, Flask-WeasyPrint will short-circuit the network and make the request at the WSGI level, without leaving the Python process.

Note that from a Flask view function you already are in a request context and thus do not need flask.Flask.test_request_context().