在我的 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 忽略了这个方法。任何提示我可能会错过什么?