2014-03-03 62 views
3

爲什麼這一工作並不:不能得到龍捲風staticfilehandler工作

application = tornado.web.Application([(r"/upload.html",tornado.web.StaticFileHandler,\ 
             {"path":r"../web/upload.html"}),])  
if __name__ == "__main__": 
    print "listening" 
    http_server = tornado.httpserver.HTTPServer(application) 
    http_server.listen(8888) 
    tornado.ioloop.IOLoop.instance().start() 

擊中

http://localhost:8888/upload.html throws: 

TypeError: get() takes at least 2 arguments (1 given) 
ERROR:tornado.access:500 GET /upload.html (::1) 6.47ms 

我曾嘗試在互聯網上進行搜索,但好像我的使用是完全正確的。 所以我找不到爲什麼它不工作。互聯網上的大多數例子都是關於爲一個完整的目錄提供一個靜態處理程序。那麼情況就是這樣,它不適用於單個文件?

回答

4

你有兩個選擇來解決這個錯誤。

  1. 添加../web/目錄中的所有文件。龍捲風不處理單個文件。

    application = tornado.web.Application([(r"/(.*)", \ 
                 tornado.web.StaticFileHandler, \ 
                 {"path":r"../web/"}),]) 
    
  2. 您可以渲染HTML作爲輸入文件。您需要爲每個HTML文件創建一個處理程序。

    import tornado.web 
    import tornado.httpserver 
    
    
    class Application(tornado.web.Application): 
        def __init__(self): 
         handlers = [ 
          (r"/upload.html", MainHandler) 
         ] 
         settings = { 
          "template_path": "../web/", 
         } 
         tornado.web.Application.__init__(self, handlers, **settings) 
    
    
    class MainHandler(tornado.web.RequestHandler): 
        def get(self): 
         self.render("upload.html") 
    
    
    def main(): 
        applicaton = Application() 
        http_server = tornado.httpserver.HTTPServer(applicaton) 
        http_server.listen(8888) 
    
        tornado.ioloop.IOLoop.instance().start() 
    
    if __name__ == "__main__": 
        main() 
    
3

StaticFileHandler通常用於提供目錄,因此它期望接收路徑參數。從the docs

注意,在正則表達式的捕獲組是必需的解析值 用於路徑參數給get()方法(除上述 構造器參數不同);有關詳細信息,請參閱URLSpec。

例如,

urls = [(r"/(.*)", tornado.web.StaticFileHandler, {"path": "../web"})] 
application = tornado.web.Application(urls) 

將服務於../web中的每個文件,包括upload.html。

+3

如果你只是想提供一個魚貫而出的目錄,你可以通過將在正則表達式的文件名和目錄的路徑參數做到這一點:'[(R「/(上傳\ .html)「,StaticFileHandler,{」path「:」../ web「})]' –