Search code examples
pythonflaskxhtml2pdf

AttributeError: 'NoneType' object has no attribute 'app'


The below code gives error:

Traceback (most recent call last):
  File "pdf.py", line 14, in <module>
    create_pdf(render_template('templates.htm'))
  File "/usr/local/lib/python2.7/dist-packages/flask/templating.py", line 123, in render_template
    ctx.app.update_template_context(context)
AttributeError: 'NoneType' object has no attribute 'app'

Code:

from xhtml2pdf import pisa
from StringIO import StringIO
from flask import render_template,Flask

app=Flask(__name__)
app.debug=True

@app.route("/")
def create_pdf(pdf_data):
        filename= "file.pdf"
        pdf=pisa.CreatePDF( StringIO(pdf_data),file(filename, "wb"))

if __name__ == "__main__":
        create_pdf(render_template('templates.htm'))

Solution

  • From the code, I can see that you want to allow user to download pdf.

    from xhtml2pdf import pisa
    from StringIO import StringIO
    from flask import render_template,Flask, Response
    
    app=Flask(__name__)
    app.debug=True
    
    @app.route("/")
    def create_pdf(pdf_data):
            filename= "file.pdf"
            pdf=pisa.CreatePDF( StringIO(pdf_data),file(filename, "wb"))
            return Response(pdf, mimetype='application/octet-stream',
                            headers={"Content-Disposition": "attachment;filename=%s" % filename})
    
    if __name__ == "__main__":
            app.run()
    

    Now, run python aboveprogram.py

    Go to http://localhost:5000

    Browser prompts to download PDF.