我正在使用龙卷风,我有这样的设置:
application = tornado.web.Application([
(r"/", MainHandler),
(r"/wiki/(.+)", WikiHandler),
(r"/static/(.*)", tornado.web.StaticFileHandler, {"path": "./static/"})
], template_path = 'templates')
我现在要解决的问题是在某些情况下将选择查询从/wiki/
转发到静态处理程序。现在,处理程序看起来像这样:
def get(self, path):
passthroughName = os.path.join ('content', path)
if os.path.exists (passthroughName):
self.write (open (passthroughName, 'rb').read ())
self.finish ()
return
else:
# Do some stuff
我想做的是首先为StaticFileHandler
中的路径调用/wiki/
,如果失败,则将请求转发给我的处理程序。有没有一些简单的配置方法来做到这一点,或者我是否必须继承StaticFileHandler
并在那里手动处理404?
答案 0 :(得分:1)
目前无法将一个处理程序无缝委托给另一个,而StaticFileHandler特别难以以这种方式集成,因为它假设URL和Etags之间的静态映射(如果磁盘上的文件可以在服务器运行时进行修改,您可能不想要StaticFileHandler!)。我的第一个建议是设计您的URL空间,以便您可以通过URL上的正则表达式区分静态和动态部分。
如果你不能这样做,那么扩展你当前用来添加StaticFileHandler所需功能的处理程序,而不是尝试组装两个独立的东西,可能会更好。处理程序。