2014-01-13 2 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

Yup! Это поставило меня на правильный путь! – Asken

ответ

0

Поскольку @gawel написал ответ, необходимо добавить маршрут с помощью DirectoryApp в качестве контроллера. Есть еще одна вещь, чтобы заметить, что она работает непосредственно из примера.

Расширение template_to_regex в примере добавляет $ к принуждению нас написать выражение маршрута, которое охватывает весь URL-адрес, чтобы поймать. canbewhatever никогда не используется и может быть любым. Важное значение имеет регулярное выражение после переменной.

add_route должен выглядеть примерно так:

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