python
  • pyramid
  • 2012-01-03 70 views 0 likes 
    0

    有没有办法在@view_config level的级别传递额外的参数?在@view_config decorator中传递额外的参数

    我想用多@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,并将其与每一个URL调度方案的路径名('circle_route''triangle_route')的。

    相关问题