2017-08-14 128 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

相關問題