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

后端 未结 3 693
隐瞒了意图╮
隐瞒了意图╮ 2020-12-16 10:53

I have a trivial app where I\'m trying to redirect the favicon per:

http://flask.pocoo.org/docs/0.10/patterns/favicon/

app = flask.Flask(__name__)
ap         


        
相关标签:
3条回答
  • 2020-12-16 11:01

    Don't put this in the app but in the html file

        <html lang="en">
        <head>
            <title>{{ title }}</title>
             <meta charset="utf-8">
             <meta name="viewport" content="width=device-width/2, initial-scale=1">
             <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
        </head>
    
    0 讨论(0)
  • 2020-12-16 11:04

    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.

    0 讨论(0)
  • 2020-12-16 11:15

    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.

    0 讨论(0)
提交回复
热议问题