2012-01-03 1 views
0

Есть ли способ передать дополнительный параметр на уровне @view_config level?Прохождение дополнительного параметра в декораторе @view_config

Я хотел бы использовать несколько @view_config декораторов для метода, но передать параметр, чтобы указать, какой было использовано один:

@view_config(renderer="shape.mak", route_name='circle_route') 
@view_config(renderer="shape.mak", route_name='triangle route') 
def new_model(self, fparams=None, ppath=None): 
    #here, I'd like to capture a variable that tells me whether the cirlce or triangle route was used to access this method 

Я понимаю, что может консолидировать свои маршруты (например, иметь маршрут формы) и добавить дополнительный параметр для типа фигуры, но я хотел бы знать мои варианты.

ответ

1

Конфигурация представления предназначена для декларативного. Это означает, что представление не знает, как оно отображается, вы просто возвращаете одинаковый формат словаря каждый раз, и выбранный рендерер будет обрабатывать его на основе предикатов. При этом вы можете разбить этот шаблон, если хотите, потому что вы можете делать все, что хотите, в custom_predicate.

def set_shape_predicate(shape): 
    def predicate(context, request): 
     request.shape = shape 
     return True 
    return predicate 

@view_config(renderer="shape.mak", route_name='circle_route', custom_predicates=[set_shape_predicate('circle')]) 
@view_config(renderer="shape.mak", route_name='triangle route', custom_predicates=[set_shape_predicate('triangle')]) 
def new_model(self): 
    # request.shape will be 'circle' or 'triangle' 

Вы также можете просто проверить request.matched_route.name и сравнить его с каждым из имен маршрутов ('circle_route' или 'triangle_route') в сценарии URL отправки.

Смежные вопросы