Can't serve static files from cherrypy
I'm starting to learn cherrypy but I've run in to a roadblock. I can't get static files to save my life. I'm getting a 404. The path '/static' was not found.
I've googled however have yet to find a solution. All I want to do is serve files at htt开发者_Python百科p://localhost:8080/static
Suggetions?
import os
import cherrypy
class Root(object):
@cherrypy.expose
def index(self):
pass
config = {
'/static':{
'tools.staticdir.on': True,
'tools.staticdir.dir': os.path.join(os.path.dirname(__file__), 'static')
}
}
cherrypy.tree.mount(Root(), '/', config = config)
cherrypy.engine.start()
Some ideas:
- In CherryPy 3.2+, try
tools.staticdir.debug = True
, combined withlog.screen = True
or some other more preferred logging setup. That will help more than anything I can guess at in this answer. - Try
tools.staticdir.dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'static'))
; it needs to be absolute (or, if .dir is not absolute, then tools.staticdir.root needs to be). - In CherryPy 3.1 and above, you usually need to call engine.block() after engine.start().
Try this
web_config = {'/': {
'tools.staticdir.on': True,
'tools.staticdir.root' : os.path.abspath(os.path.join(os.path.dirname(__file__))),
'tools.staticdir.dir' : os.path.abspath(os.path.join(os.path.dirname(__file__), 'static'))
},
"/favicon.ico": {
'tools.staticfile.on': True,
'tools.staticfile.filename': "favicon.ico",
'tools.staticdir.on': True,
'tools.staticdir.dir': "images",
},
'/robots.txt': {
'tools.staticfile.on': True,
'tools.staticfile.filename': "robots.txt",
'tools.staticdir.on': True,
'tools.staticdir.dir': "", },
'/images': {
'tools.staticdir.on': True,
'tools.staticdir.dir': "images",
},
'/css': {
'tools.staticdir.on': True,
'tools.staticdir.dir': "css",
},
'/js': {
'tools.staticdir.on': True,
'tools.staticdir.dir': "js",
}
}
And started with
if __name__ == "__main__":
cherrypy.config.update(server_config)
cherrypy.tree.mount(WebSpid(), config=web_config)
if hasattr(cherrypy.engine, 'block'):
# 3.1 syntax
cherrypy.engine.start()
cherrypy.engine.block()
精彩评论