在金字塔中使用URLDispatch时,Context谓词是否有用?

时间:2017-01-04 19:35:07

标签: pyramid

我试图围绕金字塔1.6+中“上下文”谓词的有用性。当只使用URLDispatch时,例如,我可能有一个可调用的视图,如下所示:

@view_config(route_name="employee_edit", context=Employee)
...

让我们说我有一个像这样定义的路线,并定义了路线工厂:

config.add_route("employee_edit","/employee/edit/{id}", factory=Employee)

暂时忽略权限问题,当用户浏览employee_edit路由时,Pyramid可能会发现上面的视图可以接受。细

但我的问题是:在上面的例子中,我的@view_config对“context = Employee”有什么价值?我在人们的代码中看到过这个。

如果我理解的话,context =基本上意味着“只有在上下文对象包含与context =”中指定的对象相同的类型时才能使用此视图。换句话说,在上面的示例中,除非它包含Employee对象,否则不要调用此视图。

但是上下文怎么可能不包含Employee对象呢?换句话说,在我上面的例子中,我假设我只能有一个视图指定一个路由,并且一个路由被硬编码为在上下文中发出一个Employee对象...它不像该视图可以用于其他路线,不是吗?

1 个答案:

答案 0 :(得分:2)

主要与两种情况相关:

  1. 如果工厂可能会返回不同类型的上下文,那么您可能希望与之匹配。

  2. 如果您的路线使用的是use_global_views=True且您的视图没有route_name=,那么您的视图只会耦合到上下文,而不是显式路线。

  3. 否则,如您的示例所示,假设工厂始终返回该类型的上下文,则它是多余的。