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

标签 ckan

当安装多个 CKAN 扩展时,它们似乎会相互覆盖。 例如ckan.plugins = pulgin1,plugin2,plugin3

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

功能(函数等)怎么样?没有找到与此相关的代码或文档。

最佳答案

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

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

如果示例中的每个插件在同一模板上使用 ckan_extends,则 plugin3 会扩展 CKAN 的该模板的基本版本 plugin2扩展了 plugin3 的内容,最后 plugin1 扩展了 plugin2 的内容。如果其中一个插件不使用ckan_extends,那么该链就会被破坏。

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

这也意味着,当左侧列出的插件对资源 View 类型、模板助手等使用相同名称时,会覆盖右侧列出的插件。请参阅 the section on avoiding name clashes在 CKAN 文档中了解更多信息。

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

关于CKAN扩展相互覆盖,正确的顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52936903/

相关文章:

authorization - 如何在 CKAN v2.0 中将数据集设为私有(private)

ckan - CKAN 中“链接到文件”和“链接到 API”有什么区别?

python - Ckan备份和恢复

ckan - 我可以通过 CKAN UI 将 CSV 文件直接上传到数据存储中吗?

json - 目前现场的 CKAN 实例是否支持 JSON-LD DCAT 格式?

postgresql - ckan中solr和postgreSQL是怎么连接的?

slug - 有没有办法改变 CKAN 中的 url 路径?

api - 从 CKAN 中的资源字典访问 package_id

python - 使用 CKAN API 和 Python Requests 库创建 CKAN 数据集