如何使用金字塔遍历包装?

时间:2012-05-21 15:50:36

标签: python pyramid

我是金字塔以及遍历概念的新手。我有一个使用遍历的基本对象模型但是对象是位置不知道的,所以阅读在此页面http://docs.pylonsproject.org/projects/pyramid/en/1.0-branch/narr/resources.html#location-aware上找到的金字塔文档,它讨论了使用pyramid_traversalwrapper。

按照说明我将以下几行添加到我的主页:

config = Configurator(root_factory=Root)
config.registry.registerAdapter(ModelGraphTraverser, (Interface,),
                            ITraverser)

我的遍历树对象的其余部分如下所示:

class Root(object):
    def __init__(self, request):
        pass                    

    def __getitem__(self, key):
        if key == 'users':
            return UserList()
        raise KeyError 

class UserList():
    def __getitem__(self, key):
        users = {'a':None,'b':None, 'c':None} 
        if key in users:
            return User()
        raise KeyError

class User(object):
    def __init__(self):
        pass
    def __getitem__(self, key):
        if (key == 'channels'):
            return Channels()
    def GET(self):
        return Response("got user")

当我运行代码时,它似乎在解析网址时使用了ModelGraphTraverser,但是我需要做些什么才能让我的模型识别位置,就像知道__parent____name__一样这样?我是否必须添加包装类?如果是这样我该如何去做呢? pyramid_traversalwrapper应该毫不费力地管理__parent____name__,但我不知道如何利用它。

1 个答案:

答案 0 :(得分:0)

pyramid_traversalwrapper会在遍历时自动设置对象的__name____parent__属性(否则您必须手动执行此操作)。

这意味着您可以在视图中使用对象的这些属性。举个例子:

@view_config(context='Channels')
def some_view(context, request):
    user = context.__parent__
    userlist = user.__parent__
    print user.__name__  # Prints a, b or c
    print userlist.__name__  # Prints 'users'