回到在 Tornado 中提供静态内容
Falling back to serving static content in Tornado
我正在使用龙卷风并且我有这样的设置:
application = tornado.web.Application([
(r"/", MainHandler),
(r"/wiki/(.+)", WikiHandler),
(r"/static/(.*)", tornado.web.StaticFileHandler, {"path": "./static/"})
], template_path = 'templates')
我现在要解决的问题是在某些情况下将 select 查询从 /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?
目前不可能让一个处理程序无缝地委托给另一个处理程序,并且 StaticFileHandler 尤其难以以这种方式集成,因为它假定 URLs 和 Etag 之间的静态映射(如果文件在服务器 运行 时可以修改磁盘上的内容,您可能不需要 StaticFileHandler!)。我的第一个建议是设计 URL space 以便您可以通过 URL 上的正则表达式区分静态和动态部分。
如果您不能这样做,最好扩展您当前使用的处理程序以从 StaticFileHandler 添加您需要的功能,而不是尝试组装结合两个单独处理程序的东西。
我正在使用龙卷风并且我有这样的设置:
application = tornado.web.Application([
(r"/", MainHandler),
(r"/wiki/(.+)", WikiHandler),
(r"/static/(.*)", tornado.web.StaticFileHandler, {"path": "./static/"})
], template_path = 'templates')
我现在要解决的问题是在某些情况下将 select 查询从 /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?
目前不可能让一个处理程序无缝地委托给另一个处理程序,并且 StaticFileHandler 尤其难以以这种方式集成,因为它假定 URLs 和 Etag 之间的静态映射(如果文件在服务器 运行 时可以修改磁盘上的内容,您可能不需要 StaticFileHandler!)。我的第一个建议是设计 URL space 以便您可以通过 URL 上的正则表达式区分静态和动态部分。
如果您不能这样做,最好扩展您当前使用的处理程序以从 StaticFileHandler 添加您需要的功能,而不是尝试组装结合两个单独处理程序的东西。