回到Tornado中提供静态内容

时间:2015-03-18 16:46:25

标签: python tornado

我正在使用龙卷风,我有这样的设置:

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?

1 个答案:

答案 0 :(得分:1)

目前无法将一个处理程序无缝委托给另一个,而StaticFileHandler特别难以以这种方式集成,因为它假设URL和Etags之间的静态映射(如果磁盘上的文件可以在服务器运行时进行修改,您可能不想要StaticFileHandler!)。我的第一个建议是设计您的URL空间,以便您可以通过URL上的正则表达式区分静态和动态部分。

如果你不能这样做,那么扩展你当前用来添加StaticFileHandler所需功能的处理程序,而不是尝试组装两个独立的东西,可能会更好。处理程序。