在@view_config装饰器中传递额外的参数

时间:2012-01-03 22:47:07

标签: python pyramid

有没有办法在@view_config level

级别传递额外的参数

我想为一个方法使用多个@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 个答案:

答案 0 :(得分: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')进行比较。