我正在使用Ubuntu并且有一个名为“webchat”的目录,在这个目录下有4个文件:webchat.py,webchat.css,webchat.html,webchat.js。
使用Tornado创建HTTP服务器时,我将根(“/”)映射到我的python代码:'webchat.py'如下:
import os,sys
import tornado.ioloop
import tornado.web
import tornado.httpserver
#http server for webchat
class webchat(tornado.web.RequestHandler):
def get(self):
self.write("Hello, chatter! [GET]")
def post(self):
self.write("Hello, chatter! [POST]")
#create http server
Handlers = [(r"/",webchat)]
App_Settings = {"debug":True}
HTTP_Server = tornado.web.Application(Handlers,**App_Settings)
#run http server
HTTP_Server.listen(9999)
tornado.ioloop.IOLoop.instance().start()
访问http://localhost:9999会引导我进入'网络聊天'处理程序(类网聊)。但是,我想使用'webchat.py'访问同一目录中的其他文件,这些文件是webchat.css,webchat.html和webchat.js。
此网址为我提供了404:http://localhost:9999/webchat.html。 这个问题的任何可能的解决方案?
答案 0 :(得分:12)
Tornado有一个默认的静态文件处理程序,但它将url映射到/ static /,如果你必须访问/static/webchat.css中的静态文件,它会没问题吗?
如果您对此感到满意,我强烈建议您以这种方式处理静态文件。
如果您希望静态文件位于根路径,请查看web.StaticFileHandler。
如果你错过了,这是一个例子
(r"/static/(.*)", web.StaticFileHandler, {"path": "/var/www"}),
BTW,File_Name
和Handlers
在Python中不被视为好的变量名。
答案 1 :(得分:5)
仅包含文件名和相对路径的简单文件请求的解决方案:
(1)给处理程序URL模式一个野猫:
Handlers = [(r"/(.*)",webchat)]
(2)将(。*)表示的参数传递给方法'get'和'post':
def get(self,File_Name):
File = open(File_Name,"r")
self.write(File.read())
File.close()
def post(self,File_Name):
File = open(File_Name,"r")
self.write(File.read())
File.close()