0

私はピラミッドとトラバーサルの概念に不慣れです。私はトラバーサルで動作する基本的なオブジェクトモデルを持っていますが、オブジェクトは場所を認識しないため、このページ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")

コードを実行すると、URLを解決するときにModelGraphTraverserが使用されているように見えますが、andなどを知っている場合のように、モデルの場所を認識させるにはどうすればよい__parent__です__name__か?ラッパークラスを追加する必要がありますか?もしそうなら、どうすればそれを行うことができますか?pyramid_traversalwrapperは、管理__parent__と労力を軽減することになって__name__いますが、それをどのように利用するかわかりません。

4

1 に答える 1

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'
于 2012-05-30T08:08:56.407 に答える