我试图围绕金字塔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对象...它不像该视图可以用于其他路线,不是吗?
答案 0 :(得分:2)
主要与两种情况相关:
如果工厂可能会返回不同类型的上下文,那么您可能希望与之匹配。
如果您的路线使用的是use_global_views=True
且您的视图没有route_name=
,那么您的视图只会耦合到上下文,而不是显式路线。
否则,如您的示例所示,假设工厂始终返回该类型的上下文,则它是多余的。