4

当使用 URL Dispatch 时,我们可以很容易地生成一个视图的 URL,因为每个视图都有一个不同的 route_name,例如:

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

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

但是如何在遍历中做到这一点?由于没有可用的资源“登录”实例,我不知道如何生成 URL 来查看登录。

4

2 回答 2

9

在遍历中,您需要知道树的结构,并且您必须能够按需加载上下文对象。URL 是相对于上下文生成的,使用其位置感知属性__name____parent__构建 URL。

/
|- login
|- users
   |- 1
      |- edit

所以假设我们有一个User(id=1)上下文对象,我们想要登录。如果您的视图是通过 注册的@view_config(context=Root, name='login'),那么您可以通过 生成 url request.resource_url(request.root, 'login')。这是我们告诉 Pyramid 生成一个相对于树根的 URL。

另一方面,如果我们正在登录并且想要让用户进行编辑,则必须为该用户加载一个位置感知User对象才能生成 URL。request.resource_url(user, 'edit')其中userUser(id=1)具有有效__name____parent__属性的实例。

如果您在没有位置感知__parent__的情况下传递上下文,则会生成 URL,就好像您的用户已安装在,/因为这是 Pyramid 认为该对象将在您的树中的唯一理智的地方。

加载位置感知对象的能力是为什么我们强调遍历最适合使用持久对象树的原因,而不是动态生成的对象树。如果您想为它生成 URL,直接加载用户并为您填充__parent__它会更方便。__name__

于 2013-02-26T15:48:32.657 回答
1

resource_url(资源,'view_name')

于 2013-02-26T15:27:49.050 回答