CKAN 2.7 上带有蓝图插件的 build_nav_icon 助手问题

Issue with build_nav_icon helper with blueprint plugin on CKAN 2.7

我最近使用 IBlueprint 接口制作了我的第一个插件,并在 CKAN 2.8 上成功使用它。我试图将它部署到系统 运行 2.7.6(我们已推迟更新到 2.8,直到其他几个项目准备就绪,但尽管这会下降)并遇到 build_nav_icon 模板问题辅助功能。

我们正在尝试添加数据集导航菜单条目,我的 read_base.html 模板中的函数调用是:

h.build_nav_icon('relationships.read', _('Relationships'), dataset_id=pkg.name, icon='connectdevelop')

relationships.read 链接到蓝图条目,这一切都适用于 2.8,但 2.7 returns:

File '/usr/lib/ckan/default/src/ckanext-relationshipdisplay/ckanext/relationshipdisplay/templates/package/read_base.html', line 5 in block "content_primary_nav" {{ h.build_nav_icon('relationships.read', _('Relationships'), dataset_id=pkg.name, icon='connectdevelop')}}

File '/usr/lib/ckan/default/src/ckan/ckan/lib/helpers.py', line 672 in build_nav_icon return _make_menu_item(menu_item, title, **kw)

File '/usr/lib/ckan/default/src/ckan/ckan/lib/helpers.py', line 729 in _make_menu_item raise Exception('menu item %s cannot be found' % menu_item)

Exception: menu item relationships.read cannot be found

稍微看一下 CKAN 代码,make_menu_item 函数似乎只引用基于塔的路线。是否有解决方法可以使它在 2.7 上工作或者我在插件配置中可能忽略的东西?

对于 CKAN 2.7,您需要像 https://github.com/ckan/ckan/blob/2.7/ckanext/datastore/controller.py and https://github.com/ckan/ckan/blob/2.7/ckanext/datastore/plugin.py#L157

中那样创建并连接控制器
from ckan.plugins.toolkit import BaseController

class RelationshipdisplayController(BaseController):
  def someactionhere(self):
    return ''

  def before_map(self, m):
            'relationships.read', '/someurlhere',
            controller='ckanext.relationshipdisplay.controller.RelationshipdisplayController',
            action='someactionhere', ckan_icon='connectdevelop')
        return m

编辑:

实施基于塔的控制器的原因是 2.7 中的大多数烧瓶支持尚不存在。核心中唯一迁移的控制器是 api,它几乎不需要助手提供任何东西。