Python 让Tornado使用javascript提供静态HTML,而不使用static、public等前缀

Python 让Tornado使用javascript提供静态HTML,而不使用static、public等前缀,python,tornado,Python,Tornado,有没有办法避免在我的HTML文件中的每个javascript src属性前面加上“public”、“static”等前缀?我正在将一个基本的静态服务器从Node.js转换为Tornado,除此之外,一切都进展顺利 我想要模拟的等效Node.js/Express代码如下: var app = express(); app.use(express.static(__dirname + '/public')); 这将有效地更改所有内容的服务目录。这样我就可以做一些类似的事情,而不是 我在上面看到的所

有没有办法避免在我的HTML文件中的每个javascript src属性前面加上“public”、“static”等前缀?我正在将一个基本的静态服务器从Node.js转换为Tornado,除此之外,一切都进展顺利

我想要模拟的等效Node.js/Express代码如下:

var app = express();
app.use(express.static(__dirname + '/public'));
这将有效地更改所有内容的服务目录。这样我就可以做一些类似
的事情,而不是

我在上面看到的所有解决方案都是为了解决静态文件服务(比如)将其保留为“just prepend/static”

以下是我现在拥有的:

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呈现良好,但我也遇到以下错误:


警告:tornado.access:404 GET/bower\u components/d3/d3.min.js(::1)0.55ms
只需从handlers表中的路由中删除
/public/
(但将其保留在
public\u root
中),然后移动此定义(因为如果允许,它将匹配所有内容):


如果您正在设置自己的
StaticFileHandler
设置中不需要
static\u path
,谢谢!编辑时的小错误:应将处理程序数组中的逗号移到第一个元素之后,而不是第二个元素之后。
handlers = [
  (r'/', MainHandler),
  (r'/(.*)', web.StaticFileHandler, {'path': public_root}),
]