Все инструменты просто могут вызываться с некоторыми настройками, так что вы можете подождать до вашего метода индекса с помощью:
def index(self, ...):
root = my_domain_map[cherrypy.request.headers['Host']]
cherrypy.lib.staticdir(section='', dir='', root=root)
# And then this funky hack...
return cherrypy.response.body
index.exposed = True
... или просто позвонив по номеру cherrypy.lib.static.serve_file , что еще ниже ...
... но есть более интегрированный способ. Установите аргумент root
перед тем, как перейти к методу index, и, действительно, перед тем, как вызывается инструмент staticdir. Он вызывается в хуке before_handler
(приоритет 50; младшие числа запускаются первыми). Итак, вы хотите проверить заголовок вашего хоста где-то прямо перед этим; давайте выберем приоритет 30:
def staticroot(debug=False):
root = my_domain_map[cherrypy.request.headers['Host']]
cherrypy.request.toolmaps['tools']['staticdir']['root'] = root
cherrypy.tools.staticroot = cherrypy.Tool(
staticroot, point='before_handler', priority=30)
Затем включите ваш новый инструмент в конфигурации:
[/]
tools.staticroot.on = True
... и поверните его.