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,它几乎不需要助手提供任何东西。
我最近使用 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,它几乎不需要助手提供任何东西。