Передача дополнительного параметра в декоратор @view_config - PullRequest
0 голосов
/ 04 января 2012

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

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

@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 Ответ

1 голос
/ 04 января 2012

Конфигурация вида предназначена для декларативного представления.Это означает, что представление не знает, как оно отображается, вы просто возвращаете один и тот же формат словаря каждый раз, и выбранный модуль визуализации будет обрабатывать его на основе предикатов.При этом вы можете нарушить этот шаблон, если хотите, потому что вы можете делать все, что захотите, в 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.

...