如何使用多个静态文件夹处理Tornado中的静态文件处理程序?

时间:2017-08-14 13:31:05

标签: python-2.7 url-routing tornado file-handling

我目前的路由表如下:

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"
        })

我该怎么做? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

RequestHandler将所有匹配作为http-verb函数的位置参数传递。由于StaticFileHandler扩展了它并且您有2个捕获的组,因此您的代码将无法按预期工作。因此需要一步一步地改变正则表达式:

  1. 匹配整个路径:/(.*)
  2. 第一部分应为fonts,js或css:((jss|css|fonts)/.*
  3. 不应捕获内部群组 - 使用?:((?:jss|css|fonts)/.*
  4. 代码

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

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

      

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