Search code examples
pythonbottle

Bottle debug toolbar


Im trying to setup bottle debug toolbar but get the following error...

todo.py

import sqlite3
import bottle
from bottle_debugtoolbar import DebugToolbarPlugin
from bottle import route, run, debug, template, request, error, PasteServer

config = {'DEBUG_TB_ENABLED': True,
          'DEBUG_TB_INTERCEPT_REDIRECTS':True
                }

plugin = DebugToolbarPlugin(config)
bottle.install(plugin)

Error

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/bottle.py", line 862, in _handle
    return route.call(**args)
  File "/usr/local/lib/python2.7/dist-packages/bottle.py", line 1727, in wrapper
    rv = callback(*a, **ka)
  File "/usr/local/lib/python2.7/dist-packages/bottle_debugtoolbar/__init__.py", line 75, in wrapper
    return self.process_response(content)
  File "/usr/local/lib/python2.7/dist-packages/bottle_debugtoolbar/__init__.py", line 135, in process_response
    and bottle.response.headers['content-type'].startswith('text/html')
  File "/usr/local/lib/python2.7/dist-packages/bottle.py", line 1930, in __getitem__
    def __getitem__(self, key): return self.dict[_hkey(key)][-1]
KeyError: 'Content-Type'

Solution

  • bottle-debugtoolbar makes an assumption that Content-type response header is set.

    Just set the response content-type using bottle.response:

    from bottle import response
    ...
    
    @bottle.route('/')
    def index():
        response.headers['Content-Type'] = 'text/html; charset=UTF-8'
        ...
    

    UPD:

    Here's a simple working example:

    import bottle
    from bottle_debugtoolbar import DebugToolbarPlugin
    from bottle import response
    
    
    config = {
        'DEBUG_TB_ENABLED': True,
        'DEBUG_TB_INTERCEPT_REDIRECTS': True,
    }
    plugin = DebugToolbarPlugin(config)
    bottle.install(plugin)
    
    
    @bottle.route('/')
    def guestbook_index():
        response.headers['Content-Type'] = 'text/html; charset=UTF-8'
        return '<html><body>Hello, world</body></html>'
    
    bottle.debug(True)
    bottle.run(host='localhost', port=8082) 
    

    Hope that helps.