2014-01-13 76 views
0

我想使用webob.static.DirectoryApp。我只是無法弄清楚如何做到這一點:我想通過webob提供文件夾中的文件

從例如在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-文件夾中提供靜態文件!有人可以請賜我嗎?

+1

你就不能使用類似router.add_route( '/靜態',DirectoryApp(路徑))?在調用控制器之前,您可能還必須使用req.path_info_pop()才能獲取DirectoryApp – gawel

+0

所需的實際路徑!這使我走上正軌! – Asken

回答

0

@gawel寫道答案是添加一個DirectoryApp作爲控制器的路由。還有一件事要注意,它可以直接從示例中運行。

該示例中的擴展template_to_regex正在增加一個$來迫使我們編寫覆蓋整個url的路由表達式。 canbewhatever從不使用,可以是任何。重要的是變量之後的正則表達式。

的add_route應該是這個樣子:

router.add_route('/static{canbewhatever:.*}', controller=static_app)