1

在金字塔中使用遍历 url 查找时,是否可以让视图查找算法检查类的方法名称。例如,我可以这样做:

@view_defaults(context=models.Group)
class GroupView(object):
    def __init__(self, context, request):
        self.context = context
        self.request = request

    @view_config(name='members')
    def members(self):
        pass

匹配让我们说/groups/somegroup/members

有没有办法使名称查找部分动态化?也就是说,像这样:

@view_defaults(context=models.Group)
class GroupView(object):
    def __init__(self, context, request):
        self.context = context
        self.request = request

    def members(self):
        pass

    def add(self):
        pass

这样/groups/somegroup/members/groups/somegroup/add都将解析为各自的类方法?

4

1 回答 1

3

不能说这是best路(我对金字塔一无所知);但一种选择可能是仅使用装饰器来装饰类,该装饰器适当地装饰方法名称。例如。

import inspect

def config_wrap(func, name):
    @view_config(name=name)
    def wrapped(*args, **kwargs):
        return func(*args, **kwargs)
    return wrapped

def dynamic_names(cls):
    for name, m in inspect.getmembers(cls, inspect.ismethod):
        setattr(cls,name,config_wrap(m, name))
    return cls


@dynamic_names
@view_defaults(context=models.Group)
class GroupView(object):
    def __init__(self, context, request):
        self.context = context
        self.request = request

    def members(self):
        pass

    def add(self):
        pass
于 2012-12-28T21:54:19.407 回答