将自定义 theme/code 应用于 CKAN 扩展

Apply custom theme/code to CKAN extension

我希望我能解释清楚。我有一个具有自定义主题的 CKAN 实例。该主题作为自定义扩展实现,功能完备。现在我想将来自另一个扩展的输出信息添加到此自定义模板。

我知道如何使用 {% extends %} 从默认模板进行扩展以及 {% block %} 的工作原理。但我不知道如何管理我的自定义扩展输出以将其放在我的自定义模板上(来自不同的自定义扩展)。

例如我有 custom_search_form.html:

{% extends 'snippets/search_form.html' %}
  ...      

  {% if ok %}
        my code
  {% endif %}

  ...
{% endblock %}

如果这是我的自定义模板(并且它正在运行),我现在想将 'if' 块移动到我的新扩展程序中。我应该在这里添加什么或者我如何从这里引用我的新代码?我不知道这是否可能。

如果问题不够清楚,请告诉我,我会尽力澄清。非常感谢您的时间和帮助。

使用 {% extends '...' %} 在第二个插件中覆盖一个插件的模板是完全没问题的。扩展它时只需使用原始模板的路径(不带模板目录的前缀)。例如,如果您的主题有一个模板

/path/to/your/theme/ckanext/my_custom_theme/public/templates/my_custom_theme/some_snippet.html

然后您可以使用

在您的扩展程序中扩展它
{% extends 'my_custom_theme/some_snippet.hml' %}

如上所示,扩展应将新模板放在单独的子目录中以避免名称冲突。

您唯一需要记住的是插件在您的 production.ini 中列出的顺序:前面列出的插件可以扩展后面列出的插件,反之亦然。

由于您想从扩展中覆盖主题,这意味着您需要先列出扩展:

ckan.plugins = ... my_custom_extension ... my_custom_theme ...