How do I create a 404 page?

flask, jinja2, python

Solution

Jinja will throw an exception if the template is not found: `TemplateNotFound`

So instead of:

def myview():
    return render_template(...)

you could do something like this:

def myview():
    try:
        return render_template(...)
    except TemplateNotFound:
        abort(404)

And then handle the 404 error with a custom error page as explained in the Flask documentation. Don't forget to import `abort` from `flask` and `TemplateNotFound` from `jinja2`

Problem

My application catches all url requests with an `@app.route`, but occasionally I bump into a bad url for which I have no matching jinja file (bu it does match an existing `@app.route`). So I want to redirect such requests to a 404 page for that bad url. How to discriminate between "a jinja file exists" and "a jinja file doesn't exist" before returning `render_template()`?

Original source