トラバーサルでは、ツリーの構造を知っている必要があり、オンデマンドでコンテキストオブジェクトをロードできる必要があります。__name__
URLは、ロケーション認識プロパティを使用して、コンテキストに関して生成され__parent__
、URLを構築します。
/
|- login
|- users
|- 1
|- edit
したがって、User(id=1)
コンテキストオブジェクトがあり、ログインしたいとします。ビューがを介して登録されている場合は@view_config(context=Root, name='login')
、を介してURLを生成できますrequest.resource_url(request.root, 'login')
。これは、ツリーのルートに相対的なURLを生成するようにPyramidに指示しています。
一方、ログイン時にユーザーを編集させたい場合はUser
、URLを生成するために、そのユーザーの位置認識オブジェクトをロードする必要があります。request.resource_url(user, 'edit')
ここで、は有効な属性を持つのインスタンスですuser
。User(id=1)
__name__
__parent__
場所を認識しないコンテキストを渡すと、Pyramidがオブジェクトがツリー内にあると考える唯一の正しい場所であるため__parent__
、ユーザーがマウントされているかのようにURLが生成されます。/
ロケーション認識オブジェクトをロードできるため、トラバーサルは、オンザフライで生成されるオブジェクトではなく、オブジェクトの永続的なツリーで最適に機能することを強調します。ユーザーを直接ロードして、そのURLを生成する場合は、ユーザー__parent__
を既に入力しておく方がはるかに便利です。__name__