pythonbottle

Include variables in template context on every page with Bottle.py


Is there a bottle.py equivalent of context processors that you get in Flask?


Solution

  • If you're using vanilla Bottle with SimpleTemplate, there is a solution I've stumbled upon.

    For my site, I needed access to some functions in every template, app.get_url being obviously one of them. This worked for me:

    # after app creation, but before the views
    SimpleTemplate.defaults["get_url"] = app.get_url
    SimpleTemplate.defaults["url"] = lambda: request.url
    SimpleTemplate.defaults["fullpath"] = lambda: request.fullpath
    SimpleTemplate.defaults["sorted"] = sorted
    

    This works as of Bottle 0.9, I didn't test on more recent versions of the framework.

    This behavior is undocumented, but Marcel Hellkamp explained it in this thread. In there, other solutions are also mentioned:

    Also, in Bottle 0.10, new functions related to the problem were introduced in the SimpleTemplate template namespace: defined, get, and setdefault