在 Pyramid 中使用 URLDispatch 时,上下文谓词是否有用?

Is the Context predicate ever useful when using URLDispatch in Pyramid?

我正在努力思考 Pyramid 1.6+ 中 "context" 谓词的用途。例如,当只使用 URLDispatch 时,我可能有一个像这样装饰的可调用视图:

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

假设我有一个这样定义的路由,并定义了一个路由工厂:

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

暂时忽略权限问题,当用户浏览到 employee_edit 路由时,Pyramid 可能会发现上述视图可调用是可接受的。很好

但我的问题是:在上面的示例中,"context=Employee" 对我的@view_config 有什么价值?..我在人们的代码中看到了这一点。

如果我理解的话,context= 基本上意味着 "this view can only be used if the context object contains the same type as the object specified in context="。换句话说,在上面的示例中,除非它包含 Employee 对象,否则不要调用此视图。

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

主要在两种情况下相关:

  1. 如果工厂可能 return 不同类型的上下文,那么您可能想要匹配那个。

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

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