build_nav_icon 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')

relations.read 链接到一个蓝图条目,这一切都适用于 2.8,但 2.7 返回:

文件 '/usr/lib/ckan/default/src/ckanext-relationshipdisplay/ckanext/relationshipdisplay/templates/package/read_base.html', 块"content_primary_nav"中的第 5 行 {{ h.build_nav_icon('relations.read', _('Relations'(, dataset_id=pkg.name, icon='connectdevelop'(}}

文件 '/usr/lib/ckan/default/src/ckan/ckan/lib/helpers.py',第 672 行 在build_nav_icon返回_make_menu_item(menu_item,标题,**kw(

文件 '/usr/lib/ckan/default/src/ckan/ckan/lib/helpers.py',第 729 行 在_make_menu_item引发异常("找不到菜单项%s" % menu_item(

异常:找不到菜单项relationships.read

稍微查看一下 CKAN 代码,似乎 make_menu_item 函数仅引用基于塔架的路由。是否有解决方法可以在 2.7 或我在插件配置中可能忽略的内容上执行此操作?

对于 CKAN 2.7,您需要像在 https://github.com/ckan/ckan/blob/2.7/ckanext/datastore/controller.py 和 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

编辑:

实现基于 pylons 的控制器的原因是 2.7 中的大部分烧瓶支持尚不存在。核心中唯一迁移的控制器是 api,这几乎不需要帮助程序提供任何内容。

最新更新