CKAN扩展名互相覆盖,正确的顺序是什么?

时间:2018-10-22 19:57:41

标签: ckan

安装了多个CKAN扩展时,它们似乎相互覆盖。 {{1}}

如果plugin1和plugin2都修改了页面的外观(jinja tempaltes),则似乎plugin1优先于plugin2。这总是这样吗?

功能(功能等)如何?找不到与此相关的代码或文档。

1 个答案:

答案 0 :(得分:2)

关于模板,左侧列出的插件优先于右侧列出的插件。在您的示例中,如果所有三个插件提供的模板均与plugin1的模板相同,则将使用该模板。

但是,这并不意味着其他插件所做的模板更改会完全丢失:实现模板时,插件可以决定使用ckan_extends语法扩展现有模板

如果您的示例中的每个插件都在同一模板上使用ckan_extends,则plugin3扩展了该模板的CKAN基本版本,plugin2扩展了plugin3的基本版本,最后,plugin1扩展了plugin2的范围。如果其中一个插件不使用ckan_extends,则该链断开。

在其他情况下,通常按列出顺序(从左到右)调用插件。例如,如果plugin1plugin2都实现了IMiddleware接口,则首先调用plugin1.make_middleware并将其结果传递到plugin2.make_middleware

这也意味着,当左侧的插件为资源视图类型,模板助手等使用相同的名称时,它们将覆盖右侧的插件。有关更多信息,请参见CKAN文档中的the section on avoiding name clashes

对于通过IActions定义的动作功能,您可以使用ckan.plugins.toolkit.chained_action装饰器来扩展现有的动作功能,而不是替换它们(类似于模板继承)。通过IAuthFunctions定义的 auth函数同样适用,您可以在其中使用ckan.plugins.toolkit.chained_auth_function装饰器。