作为装饰类实现的金字塔视图

2024-10-01 04:57:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我的金字塔项目中有这样的代码:

class SomeViews(object):

    @view_config(...)
    def view_a(request):
       return {...}

    @view_config(...)
    def view_b(request):
       return {...}

我想修饰视图方法来修改返回的字典。如果decorator是view_config之前的第一个装饰器,则可以将它应用于视图。否则金字塔仍然使用原来的功能,由于金星的性质。在

因为我将对一个类中的所有方法应用相同的装饰器,所以我更喜欢使用类装饰器。所以不去做

^{pr2}$

对于每一种方法,我都愿意去做

@my_decorator("some_meta_info")
class SomeViews(object):
    ...

但是因为类decorator是在view_config调用之后执行的,所以它同样不能用于Venusian。我查看了view_defaults实现,以获得如何解决问题的提示,但我没有弄清楚它是如何工作的。在

有什么提示吗?我想做的,只是修改一组视图方法的结果字典。我还考虑过使用BeforeRender事件,但我没有找到在事件处理程序中以可以访问的方式注入所需元数据的方法。在我看来,使用装饰器将是更自然、更具Python味的方式。在


Tags: 方法view视图configreturn字典objectrequest
1条回答
网友
1楼 · 发布于 2024-10-01 04:57:30
import functools

def my_decorator(value):
    def _dec(f):
        @functools.wraps(f)
        def wrapper(context, request):
            print 'hey look!', value
            return f(context, request)
        return wrapper
    return _dec

@view_defaults(decorator=my_decorator('some meta info'))
class SomeViews(object):
    def __init__(self, request):
        self.request = request

    @view_config(..., renderer='string')
    def view_a(self):
        return 'foo'

view_defaults看作是传递给类中每个view_config的默认选项。但是,如果您向view_config添加一个装饰器,默认的装饰器将被覆盖,并且您的默认装饰器将被删除。在

相关问题 更多 >