Как обслуживать статические файлы из каталога, отличного от статического пути?
Я пытаюсь это:
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()
Но он продолжает обслуживать favicon.ico
который у меня есть в моем static_path (у меня есть два разных favicon.ico
по двум отдельным путям, как указано выше, но я хочу иметь возможность переопределить тот в static_path
).
Ответы
Ответ 1
Удалите static_path
из настроек приложения.
Затем установите ваш обработчик как:
handlers = [
(r'/(favicon\.ico)', tornado.web.StaticFileHandler, {'path': favicon_path_dir}),
(r'/static/(.*)', tornado.web.StaticFileHandler, {'path': static_path_dir}),
(r'/', WebHandler)
]
Ответ 2
Вам нужно скопировать favicon.ico с круглыми скобками и избежать периода в регулярном выражении. Ваш код станет
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()
Ответ 3
Есть два способа сделать это.
1. использовать static_url_prefix в настройках.
например
settings = dict(
static_path=os.path.join(os.path.dirname(__file__), 'static'),
static_url_prefix="/adtrpt/static/",
)
2. использовать пользовательский обработчик
Добавить пользовательский обработчик к обработчикам
handlers.append((r"/adtrpt/static/(.*)", MyStaticFileHandler, {"path": os.path.join(os.path.dirname(__file__), 'static')}))
Затем реализуйте свои собственные методы.
class StaticHandler(BaseHandler):
def get(self):
path = self.request.path
print(path)
self.redirect(BASE_URI + path)