0

我想用webob.static.DirectoryApp. 我只是不知道该怎么做:

http://docs.webob.org/en/latest/file-example.html的示例中,我的路由器看起来像:

class Router(object):
    def __init__(self, static_path=None):
        self.routes = []
        self.static_path = static_path if static_path is not None else os.path.join(os.path.dirname(os.path.realpath(__file__)), 'static')
        self.static_app = DirectoryApp(self.static_path)

    def add_route(self, template, controller, **vars):
        if isinstance(controller, basestring):
            controller = load_controller(controller)
        self.routes.append((re.compile(template_to_regex(template)),
                            controller,
                            vars))

    def __call__(self, environ, start_response):
        req = Request(environ)
        for regex, controller, vars in self.routes:
            match = regex.match(req.path_info)
            if match:
                req.urlvars = match.groupdict()
                req.urlvars.update(vars)
                return controller(environ, start_response)

        return exc.HTTPNotFound()(environ, start_response)

要创建要服务的应用程序:

def create_app():
    router = Router()

    #router.add_route('/', controller='app.controllers.default:index')
    router.add_route('/', controller=default.index)

    return router

这可以很好地为我添加的控制器提供路由。我还添加了一个self.static_app.

我只是不知道如何使用它来提供来自static-folder 的静态文件!有人可以启发我吗?

4

1 回答 1

0

正如@gawel 所写,答案是添加一个以 DirectoryApp 作为控制器的路由。还有一点需要注意,它可以直接从示例中工作。

template_to_regex示例中的扩展是$在强制我们编写一个覆盖整个要捕获的 url 的路由表达式的基础上添加一个。从未使用canbewhatever过,可以是任何东西。重要的是变量后面的正则表达式。

add_route 应该如下所示:

router.add_route('/static{canbewhatever:.*}', controller=static_app)
于 2014-01-14T08:54:26.253 回答