¿Cómo servir archivos estáticos desde un directorio diferente a la ruta estática?

Estoy intentando esto:

favicon_path = '/path/to/favicon.ico' settings = {'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() 

Pero sigue sirviendo el favicon.ico que tengo en mi static_path (tengo dos favicon.ico diferentes en dos rutas separadas, como se indicó anteriormente, pero quiero poder anular la de la static_path ).

Eliminar static_path de la configuración de la aplicación.

A continuación, establezca su controlador como:

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

Debe envolver favicon.ico con paréntesis y escapar del período en la expresión regular. Tu código se convertirá

 favicon_path = '/path/to/favicon.ico' # Actually the directory containing the favicon.ico file settings = { '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() 

Hay dos maneras de hacerlo.

1. Utilice static_url_prefix en la configuración.

p.ej

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

2. usar un controlador personalizado

Agregar controlador personalizado a los controladores

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

Entonces implemente tus métodos personalizados.

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