4

URLディスパッチを使用すると、ビューごとに次のような個別のroute_nameがあるため、ビューへのURLを簡単に生成できます。

login.py:
@view_config(route_name='login')

index.pt:
<a href="${request.route_url('login')}">Login</a>

しかし、トラバーサルでこれを行う方法は?利用可能なリソース「ログイン」のインスタンスがないため、ログインを表示するためのURLを生成する方法がわかりません。

4

2 に答える 2

9

トラバーサルでは、ツリーの構造を知っている必要があり、オンデマンドでコンテキストオブジェクトをロードできる必要があります。__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')ここで、は有効な属性を持つのインスタンスですuserUser(id=1)__name____parent__

場所を認識しないコンテキストを渡すと、Pyramidがオブジェクトがツリー内にあると考える唯一の正しい場所であるため__parent__、ユーザーがマウントされているかのようにURLが生成されます。/

ロケーション認識オブジェクトをロードできるため、トラバーサルは、オンザフライで生成されるオブジェクトではなく、オブジェクトの永続的なツリーで最適に機能することを強調します。ユーザーを直接ロードして、そのURLを生成する場合は、ユーザー__parent__を既に入力しておく方がはるかに便利です。__name__

于 2013-02-26T15:48:32.657 に答える
1

resource_url(resource、'view_name')

于 2013-02-26T15:27:49.050 に答える