flask-debugtoolbar icon indicating copy to clipboard operation
flask-debugtoolbar copied to clipboard

Registered blueprint name does not match route blueprint name

Open jdimmerman opened this issue 3 years ago • 0 comments

The blueprint name registered for the app doesn't match that registered for the route.

The app is registered with blueprint name debubtoolbar

module = Blueprint('debugtoolbar', __name__)

But the route is registered with blueprint name _debug_toolbar as implied by the endpoint name _debug_toolbar.static. Thus, in a consuming app, flask.request.blueprint returns _debug_toolbar, which does not exist in flask.current_app.blueprints.

app.add_url_rule('/_debug_toolbar/static/<path:filename>',
                         '_debug_toolbar.static', self.send_static_file)

Three potential fixes - both simple, but may break existing consumers

  • Change the registered BP name to _debug_toolbar
  • Change the endpoint to use the BP name debugtoolbar, and then change the two references of url_for

Ideally in both cases, you'd register the route under the context of the BP to avoid the issue going forward. For example, if you use the second solution

module.add_url_rule('/_debug_toolbar/static/<path:filename>', endpoint="static", view_func=self.send_static_file)

References in url_for, for context:

toolbar.py

self.template_context = {
  'static_path': url_for('debugtoolbar.static', filename='')
}

panels/template.py

'static_path': url_for('debugtoolbar.static', filename=''),

jdimmerman avatar Apr 20 '22 17:04 jdimmerman