有没有办法避免在我的HTML文件中的每个javascript src属性中加上"public","static"等?我正在将一个基本的静态服务器从Node.js转换为Tornado,除此之外一切都很顺利.
我想模拟的等效Node.js/Express代码如下:
var app = express();
app.use(express.static(__dirname + '/public'));
Run Code Online (Sandbox Code Playgroud)
这有效地改变了所有内容的服务目录.这样我可以做一些事情,<script src="js/foo.js">
而不是<script src="public/js/foo.js">
.
我在SO上看到的解决静态文件服务的所有解决方案(就像这个一样)让它处于"只是前置/静态".
这就是我现在所拥有的:
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()
Run Code Online (Sandbox Code Playgroud)
当我尝试加载index.html
HTML渲染时,我也收到此错误:
WARNING:tornado.access:404 GET /bower_components/d3/d3.min.js (::1) 0.55ms
只需/public/
从处理程序表中的路径中删除(但保留它public_root
,并在所有其余部分之后移动此定义(因为如果你允许它将匹配所有内容):
handlers = [
(r'/', MainHandler),
(r'/(.*)', web.StaticFileHandler, {'path': public_root}),
]
Run Code Online (Sandbox Code Playgroud)
你不需要static_path
在你的settings
,如果你正在建立自己的StaticFileHandler
.
归档时间: |
|
查看次数: |
4115 次 |
最近记录: |