Can't serve static files from cherrypy
Asked Answered
A

2

5

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 http://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()
Audiogenic answered 25/3, 2011 at 1:38 Comment(0)
E
7

Some ideas:

  1. In CherryPy 3.2+, try tools.staticdir.debug = True, combined with log.screen = True or some other more preferred logging setup. That will help more than anything I can guess at in this answer.
  2. 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).
  3. In CherryPy 3.1 and above, you usually need to call engine.block() after engine.start().
Eskew answered 25/3, 2011 at 6:7 Comment(3)
I added the debug and log lines and the path its checking is absolute. Here is the message: `Checking File: e:\\python\\cherrypyapp\\static\` I double checked that path and its correct but I'm still getting a 404Audiogenic
Are you actually browsing to http://localhost:8080/static, as if you're trying to get a directory listing in your browser? The staticdir Tool doesn't provide index pages for the files it serves--you have to request an individual file, not a directory.Eskew
It was the engine.block() that did it. Thanks!Audiogenic
I
0

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() 
Invar answered 9/6, 2021 at 1:46 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.