有没有办法避免在我的HTML文件中为每个javascript src属性预先添加" public"," static"等?我正在将基本的静态服务器从Node.js转换为Tornado,除此之外一切都很顺利。
我想要模拟的等效Node.js / Express代码如下:
var app = express();
app.use(express.static(__dirname + '/public'));
有效地更改了所有内容的服务目录。这样我可以做<script src="js/foo.js">
而不是<script src="public/js/foo.js">
。
我在SO上看到的解决静态文件服务的所有解决方案(如this one)都将其留在了,#34;只是前置/静态&#34;。
这就是我现在所拥有的:
import os
import tornado.ioloop
import tornado.web as web
public_root = os.path.join(os.path.dirname(__file__), 'public')
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render('index.html')
handlers = [
(r'/public/(.*)', web.StaticFileHandler, {'path': public_root}),
(r'/', MainHandler)
]
settings = dict(
debug=True,
static_path=public_root,
template_path=public_root
)
application = web.Application(handlers, **settings)
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
当我尝试加载index.html
时HTML呈现正常,但我也收到此错误:
WARNING:tornado.access:404 GET /bower_components/d3/d3.min.js (::1) 0.55ms
答案 0 :(得分:7)
只需从处理程序表中的路径中删除/public/
(但将其保留在public_root
中,然后在之后移动此定义(因为它将匹配所有内容你放了):
handlers = [
(r'/', MainHandler),
(r'/(.*)', web.StaticFileHandler, {'path': public_root}),
]
如果您要设置自己的static_path
,则settings
中不需要StaticFileHandler
。