2017-08-14 57 views
0

我现在的路由表是象下面这样:如何处理Tornado中的静态文件处理程序与几个静态文件夹?

routing_table = [ 
     ("/api/ping", PingHandler), 
     ("/css/(.*)", StaticFileHandler, { 
      "path": "my-website-path/css" 
     }), 
     ("/js/(.*)", StaticFileHandler, { 
      "path": "my-website-path/js" 
     }), 
     ("/fonts/(.*)", StaticFileHandler, { 
      "path": "my-website-path/fonts" 
     }) 

我想只用一个正则表达式来处理我的静态文件。 像下面的东西?

routing_table = [ 
     ("/api/ping", PingHandler), 
     ("/(css|js|fonts)/(.*)", StaticFileHandler, { 
      "path": "my-website-path/$1" 
     }) 

我该怎么做? 预先感谢您。

+0

也许尝试继承的StaticFileHandler指定要 –

+0

其实...我敢肯定龙卷风路线支持正则表达式的文件夹,但使用的Nginx/Apache来提供静态资产将更加优化 –

+0

好主意,我要去如果没有其他解决方案,则继承StaticFileHandler。龙卷风路线肯定支持正则表达式,我宁愿龙卷风本身处理项目的所有文件。 – M07

回答

1

A RequestHandler将所有匹配作为位置参数传递给http动词功能。由于StaticFileHandler扩展它,并且您有2个捕获组,您的代码将无法按预期工作。所以,正则表达式需要逐步改变,步:

  1. 匹配整个路径:/(.*)
  2. 第一部分应该是字体,JS或CSS:((jss|css|fonts)/.*
  3. 内组不应该被捕获 - 使用的?:((?:jss|css|fonts)/.*

代码

routing_table = [ 
     ("/api/ping", PingHandler), 
     ("/((?:css|js|fonts)/.*)", StaticFileHandler, { 
      "path": "my-website-path" 
     } 

请记住,该StaitcFileHandler(如@ cricket_007提到的)...

该处理器主要用于开发和轻型文件服务的使用;对于繁重的流量,使用专用的静态文件服务器(如nginx或Apache)会更有效率。我们支持HTTP Accept-Ranges机制来返回部分内容(因为有些浏览器需要使用此功能来查找HTML5音频或视频)。

+0

别担心,我知道,但我不会有一个沉重的交通。谢谢你的帮助。它就像一个魅力;) – M07

相关问题