Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 如何在Tornado中处理带有多个静态文件夹的静态文件处理程序?_Python 2.7_Url Routing_Tornado_File Handling - Fatal编程技术网

Python 2.7 如何在Tornado中处理带有多个静态文件夹的静态文件处理程序?

Python 2.7 如何在Tornado中处理带有多个静态文件夹的静态文件处理程序?,python-2.7,url-routing,tornado,file-handling,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"

我当前的路由表如下所示:

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"
        })
我该怎么做?
提前感谢。

A
RequestHandler
将所有匹配项作为位置参数传递给http谓词函数。由于
StaticFileHandler
扩展了它,并且您有两个捕获的组,因此您的代码将无法按预期工作。因此,需要逐步更改正则表达式:

  • 匹配整个路径:
    /(.*)
  • 第一部分应该是字体、js或css:
    ((jss | css |字体)/.*
  • 不应捕获内部组-使用:
    ((?:jss | css |字体)/.*
  • 代码

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

    请记住,(正如@cricket_007所提到的)

    此处理程序主要用于开发和轻型文件服务;对于高流量,使用专用静态文件服务器(如nginx或Apache)将更有效。我们支持HTTP接受范围机制来返回部分内容(因为有些浏览器要求在HTML5音频或视频中提供此功能)


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

  • 匹配整个路径:
    /(.*)
  • 第一部分应该是字体、js或css:
    ((jss | css |字体)/.*
  • 不应捕获内部组-使用:
    ((?:jss | css |字体)/.*
  • 代码

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

    请记住,(正如@cricket_007所提到的)

    此处理程序主要用于开发和轻型文件服务;对于高流量,使用专用静态文件服务器(如nginx或Apache)将更有效。我们支持HTTP接受范围机制来返回部分内容(因为有些浏览器要求在HTML5音频或视频中提供此功能)


    也许可以尝试子类化StaticFileHandler来指定您想要的文件夹……我很确定tornado routes支持regex,但是使用Nginx/Apache来服务静态资产将是一个更好的主意,如果没有其他解决方案,我将子类化StaticFileHandler。tornado routes肯定支持regex,我更喜欢Torna自行处理项目的所有文件。也许可以尝试将StaticFileHandler子类化,以手动指定所需的文件夹…我非常确定tornado routes支持正则表达式,但使用Nginx/Apache来服务静态资产将是一个更好的主意,如果没有其他解决方案,我将对StaticFileHandler子类化。tornado routes支持当然是rt regex,我更喜欢Tornado自己处理所有项目的文件。别担心,我知道,但我不会有大量的流量。谢谢你的帮助。它像一个符咒一样工作;)别担心,我知道,但我不会有大量的流量。谢谢你的帮助。它像一个符咒一样工作;)