无法让龙卷风静态文件处理程序工作

Cap*_*row 4 python tornado

为什么这不起作用:

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()
Run Code Online (Sandbox Code Playgroud)

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 
Run Code Online (Sandbox Code Playgroud)

我尝试在互联网上搜索,但似乎我的用法完全正确。所以我找不到它不起作用的原因。互联网上的大多数示例都是关于为完整目录提供静态处理程序。那么它是否不适用于单个文件?

jcf*_*cco 6

您有两种选择来修复此错误。

  1. 添加该目录的所有文件../web/。Tornado 不处理单个文件。

    application = tornado.web.Application([(r"/(.*)", \
                                           tornado.web.StaticFileHandler, \
                                           {"path":r"../web/"}),]) 
    
    Run Code Online (Sandbox Code Playgroud)
  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() 
    
    Run Code Online (Sandbox Code Playgroud)