首页 > 解决方案 > 如何自定义 ckan header 站点导航选项卡

问题描述

我想将额外的标题站点导航选项卡添加到默认选项卡。

我已经尝试使用这里给出的解决方案,但它对我不起作用。我收到Exception: menu itemapicannot 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)到位

标签: jinja2pylonsckan

解决方案


根据您发布的内容,您似乎尚未设置plugins.implements(plugins.IConfigurer, inherit=True)注册新模板。尝试将此扩展名作为示例。https://github.com/ckan/ckan/blob/2.8/ckanext/stats/plugin.py用于设置新页面。

你在菜单的正确轨道上。

另外,您使用的是什么版本的 CKAN?您可能希望将其 pswitch 为烧瓶蓝图。像这样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


推荐阅读