Flask.url_for() error: Attempted to generate a URL without the application context being pushed

According to the doc:

Setting a SERVER_NAME also by default enables URL generation without a request context but with an application context.

since you're using app_context, you may set the SERVER_NAME Configuration Value.

By the way, as the doc:Adding a favicon says:

<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">

the above line should be enough for most browsers, we don't have to do any other things.


Late answer, I've just run into the same problem. I don't see a big downside in handling the redirect like this instead:

@app.route('/favicon.ico')
def favicon():
    return redirect(url_for('static', filename='favicon.ico'))

This prevents url_for from being called before the application is ready.

To give a counterpoint to using a link in the HTML only, it's a good practice for every site to have a favicon.ico and robots.txt at the root level - even if they're empty. It avoids problems like this and other unnecessary errors that adds noise to logs.

Tags:

Flask