我对金字塔和遍历概念都是新手。我有一个使用遍历的基本对象模型,但是对象是不知道位置的,所以阅读这个页面上的金字塔文档http://docs.pylonsproject.org/projects/pyramid/en/1.0-branch/narr/resources.html#location-aware,它谈到了使用pyramid_traversalwrapper。
按照指示,我在main中添加了以下代码行:
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")当我运行代码时,它似乎确实在解析urls时使用了ModelGraphTraverser,然而,我必须做什么才能让我的模型知道位置,就像知道__parent__和__name__之类的东西一样?我必须添加包装器类吗?如果是这样的话,我该怎么做呢?pyramid_traversalwrapper应该让管理__parent__和__name__变得轻松,但我不知道如何利用它。
发布于 2012-05-30 16:08:56
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'https://stackoverflow.com/questions/10688458
复制相似问题