【发布时间】:2013-09-12 08:17:32
【问题描述】:
在我的 Pyramid 代码中,我为不同的路线和模板多次注册了一个函数。所以我的应用以不同的格式/视图显示相同的数据:
class MyViews(object):
@view_config(route_name='A', renderer='A')
@view_config(route_name='B', renderer='B')
@view_config(route_name='C', renderer='C')
@view_config(route_name='D', renderer='D')
def my_view(self):
return results
这很好用,但是因为我有很多情况都遵循特定的架构,所以我想像这样简化我的代码:
def entity_search_method(type_name):
def decorator(fkt):
fkt = view_config(route_name = A % type_name, ...)(fkt)
fkt = view_config(route_name = B % type_name, ...)(fkt)
fkt = view_config(route_name = C % type_name, ...)(fkt)
fkt = view_config(route_name = D % type_name, ...)(fkt)
return fkt
return decorator
然后:
class MyViews(object):
@entity_search_method('some_type')
def my_view(self):
return results
在我的理解中,这应该和直接调用装饰器完全一样。我什至不需要关心functools.wrap 或类似的东西,因为我自己什至不生成新函数。但是 Pyramid 忽略了这个方法。任何提示我可能会丢失什么?
【问题讨论】:
标签: python decorator pyramid python-decorators