How to serve static files from a different directory than the static path? How to serve static files from a different directory than the static path? python python

How to serve static files from a different directory than the static path?


Delete static_path from the app settings.

Then set your handler like:

handlers = [            (r'/(favicon\.ico)', tornado.web.StaticFileHandler, {'path': favicon_path_dir}),            (r'/static/(.*)', tornado.web.StaticFileHandler, {'path': static_path_dir}),            (r'/', WebHandler)]


You need to wrap favicon.ico with parenthesis and escape the period in the regular expression. Your code will become

favicon_path = '/path/to/favicon.ico' # Actually the directory containing the favicon.ico filesettings = {    'debug': True,     'static_path': os.path.join(PATH, 'static')}handlers = [    (r'/', WebHandler),    (r'/(favicon\.ico)', tornado.web.StaticFileHandler, {'path': favicon_path})]application = tornado.web.Application(handlers, **settings)application.listen(port)tornado.ioloop.IOLoop.instance().start()


There are two ways to do it.

1. use static_url_prefix in settings.

e.g.

settings = dict(    static_path=os.path.join(os.path.dirname(__file__), 'static'),    static_url_prefix="/adtrpt/static/",)

2. use custom handler

Append custom handler to handlers

handlers.append((r"/adtrpt/static/(.*)", MyStaticFileHandler, {"path": os.path.join(os.path.dirname(__file__), 'static')}))

Then implemente your custom methods.

class StaticHandler(BaseHandler):    def get(self):        path = self.request.path        print(path)        self.redirect(BASE_URI + path)