当安装多个 CKAN 扩展时,它们似乎会相互覆盖。e.g.ckan.plugins = pulgin1, plugin2, plugin3
如果plugin1和plugin2都修改页面的外观(jinja tempaltes),则plugin1似乎优先于plugin2。总是这样吗?
功能(功能等)怎么样?没有找到与此相关的代码或文档。
对于模板,左侧列出的插件优先于右侧列出的插件。在您的示例中,如果所有三个插件都提供相同的模板,plugin1则将使用相同的模板。
然而,这并不意味着其他插件对模板的更改完全丢失:在实现模板时,插件可以决定使用语法扩展现有模板ckan_extends。
如果示例中的每个插件都使用ckan_extends相同的模板,则plugin3扩展 CKAN 的该模板的基本版本,plugin2扩展 的版本plugin3,最后plugin1扩展 的版本plugin2。如果其中一个插件不使用,ckan_extends那么该链条就被破坏了。
在其他情况下,插件通常按照它们列出的顺序(从左到右)调用。例如,如果 和 都plugin1实现plugin2了该IMiddleware接口,则plugin1.make_middleware首先调用 then 并将其结果传递给plugin2.make_middleware.
这也意味着当左侧列出的插件对资源视图类型、模板助手等使用相同名称时,它们会覆盖右侧列出的插件。有关更多信息,请参阅 CKAN 文档中有关避免名称冲突的部分。
对于通过 定义的动作函数IActions,您可以使用ckan.plugins.toolkit.chained_action装饰器来扩展现有的动作函数,而不是替换它们(类似于模板继承)。这同样适用于通过 定义的auth 函数IAuthFunctions,您可以在其中使用ckan.plugins.toolkit.chained_auth_function装饰器。
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |