如何自定义 ckan header 站点导航选项卡
How to customize ckan header site navigation tabs
我想在默认选项卡的基础上添加额外的 header 站点导航选项卡。
我已经尝试使用给出的解决方案 here 但它对我不起作用。我收到 Exception: menu item
apicannot be found
错误
这是我的plugin.py代码
import ckan.plugins as plugins
import ckan.plugins.toolkit as toolkit
class ApiPlugin(plugins.SingletonPlugin, toolkit.DefaultDatasetForm):
plugins.implements(plugins.IRoutes, inherit=True)
def before_map(self, m):
m.connect('api', #name of path route
'/api', #url to map path to
controller='ckanext.kimetrica_theme.controller:ApiController', #controller
action='api') #controller action (method)
return m
这是我的header.html代码
{% ckan_extends %}
{% block header_site_navigation_tabs %}
{{ h.build_nav_main(
('search', _('Datasets')),
('organizations_index', _('Organizations')),
('group_index', _('Groups')),
('about', _('About')),
('api', _('api'))
) }}
{% endblock %}
这是我的 controller.py 代码
import ckan.plugins as p
from ckan.lib.base import BaseController
class ApiController(BaseController):
def api(self):
return p.toolkit.render('api.html')
我希望 api 菜单能像菜单的其余部分一样工作。我也有我的模板(api.html
)
根据您发布的内容,您似乎还没有设置 plugins.implements(plugins.IConfigurer, inherit=True)
来注册您的新模板。尝试引用此扩展作为示例。 https://github.com/ckan/ckan/blob/2.8/ckanext/stats/plugin.py 用于设置新页面。
您选对了菜单。
你用的是什么版本的CKAN?您可能希望将其切换为烧瓶蓝图。像这样https://github.com/ckan/ckan/blob/2.8/ckanext/example_flask_iblueprint/plugin.py
如果您使用的是 2.9(alphha 版),请查看此问题和评论 ckan 2.9.0 iroute before_map not invoking custom controller
我使用 ckanext-pages extension 解决了这个问题。此扩展允许您添加简单的静态页面和博客并编辑它们的内容。
我通过为 header 创建一个新的 HTML 文件解决了这个问题,例如header_foo.html
。此外,您必须更改 page.html
:
…
{%- block header %}
{% include "header_foo.html" %}
{% endblock -%}
…
用同样的方法,您可以隐藏导航选项卡。
我想在默认选项卡的基础上添加额外的 header 站点导航选项卡。
我已经尝试使用给出的解决方案 here 但它对我不起作用。我收到 Exception: menu item
apicannot be found
错误
这是我的plugin.py代码
import ckan.plugins as plugins
import ckan.plugins.toolkit as toolkit
class ApiPlugin(plugins.SingletonPlugin, toolkit.DefaultDatasetForm):
plugins.implements(plugins.IRoutes, inherit=True)
def before_map(self, m):
m.connect('api', #name of path route
'/api', #url to map path to
controller='ckanext.kimetrica_theme.controller:ApiController', #controller
action='api') #controller action (method)
return m
这是我的header.html代码
{% ckan_extends %}
{% block header_site_navigation_tabs %}
{{ h.build_nav_main(
('search', _('Datasets')),
('organizations_index', _('Organizations')),
('group_index', _('Groups')),
('about', _('About')),
('api', _('api'))
) }}
{% endblock %}
这是我的 controller.py 代码
import ckan.plugins as p
from ckan.lib.base import BaseController
class ApiController(BaseController):
def api(self):
return p.toolkit.render('api.html')
我希望 api 菜单能像菜单的其余部分一样工作。我也有我的模板(api.html
)
根据您发布的内容,您似乎还没有设置 plugins.implements(plugins.IConfigurer, inherit=True)
来注册您的新模板。尝试引用此扩展作为示例。 https://github.com/ckan/ckan/blob/2.8/ckanext/stats/plugin.py 用于设置新页面。
您选对了菜单。
你用的是什么版本的CKAN?您可能希望将其切换为烧瓶蓝图。像这样https://github.com/ckan/ckan/blob/2.8/ckanext/example_flask_iblueprint/plugin.py
如果您使用的是 2.9(alphha 版),请查看此问题和评论 ckan 2.9.0 iroute before_map not invoking custom controller
我使用 ckanext-pages extension 解决了这个问题。此扩展允许您添加简单的静态页面和博客并编辑它们的内容。
我通过为 header 创建一个新的 HTML 文件解决了这个问题,例如header_foo.html
。此外,您必须更改 page.html
:
…
{%- block header %}
{% include "header_foo.html" %}
{% endblock -%}
…
用同样的方法,您可以隐藏导航选项卡。