对Tornado服务器的路径设置感到困惑

时间:2014-09-30 21:29:08

标签: python-3.x tornado bower

我正在使用bower来获取我网站的.css和.js文件。

目录结构如下所示:

server.py bower_components / 模板/

所有HTML模板(以及我与AngularJS一起使用的部分模板)都位于模板中。由凉亭安装的东西位于bower_components中。如何定义template_path,static_path和static_url_prefix设置,以便链接到这些目录中的文件?

如果我使用相对路径,如:

HREF = “bower_components /引导/ DIST / CSS / bootstrap.css”

我会收到404错误。找不到处理程序,因此会抛出错误。似乎Tornado强迫我在我的模板上使用static_url函数?我真的必须使用它吗?当与AngularJS混合时,它看起来非常难看。我已经尝试将static_path设置为os.path.dirname( file )并尝试使用static_url,但这给了我异常:

异常:您必须在应用程序中定义'static_path'设置才能使用static_url

我该如何配置?我不敢相信我已经浪费了几个小时试图解决这个问题...... :(

3 个答案:

答案 0 :(得分:2)

您是否尝试使用StaticFileHandler?你可以使用这样的东西:

import os
import tornado.web
import tornado.ioloop

if __name__ == '__main__':
    app = tornado.web.Application([
        (r"/(.*)", tornado.web.StaticFileHandler, {"path": os.path.dirname(os.path.abspath(__file__))}),
    ])
    app.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

答案 1 :(得分:1)

您必须将staticfilehandler与放在settings变量中的某些路径变量结合使用。 http://tornado.readthedocs.org/en/latest/web.html 这很容易。您可以根据需要命名尽可能多的设置变量。

答案 2 :(得分:0)

事实证明我需要使用tornado.web.StaticFileHandler类并将路径映射到它。这就是我配置tornado.web.Application:

的方式
class TornadoApp(tornado.web.Application):

    def __init__(self):
        # static file regex patterns matched with the actual folders here
        static_handlers = {
            '/bower_components/(.*)': 'bower_components',
            '/templates/partials/(.*)': 'templates/partials'
        }
        handlers = [
            ('/', IndexHandler),
            ('/products', ProductHandler),
        ]
        # append the handlers with content from static_handlers dictionary
        for r, p in static_handlers.items():
            handlers.append((r, tornado.web.StaticFileHandler, {'path': p}))
        settings = {
            'template_path': "templates",
            'debug': True
        }
        tornado.web.Application.__init__(self, handlers, **settings)