Если вы хотите воспользоваться главным навигационным меню CKAN, это становится немного сложнее. (Нам просто нужно было это выяснить. Не уверен, что мы сделали это правильно, но мы заставили его работать с CKAN 2.2):
Во-первых, вам нужен дополнительный контент в вашем пути расширения. Предполагая, что это my_extension/amazing.html
, вы хотите добавить следующее в файл my_extension/templates/header.html (в своем пользовательском расширении):
{% ckan_extends %}
{% block header_site_navigation_tabs %}
{{ h.build_nav_main(
('search', _('Datasets')),
('organizations_index', _('Organizations')),
('group_index', _('Groups')),
('about', _('About')),
('amazing', _('Amazing Extension'))
) }}
{% endblock %}
Это вызовет ошибку сервера, так как Amazing не был зарегистрирован в пилонах в качестве сопоставленного маршрута. Мы исправим это дальше. Если вы правильно создали расширение, у вас должен быть файл my_extension/plugins.py, к которому вам нужно добавить следующее в определение класса вашего плагина:
class AmazingPlugin(plugins.SingletonPlugin, tk.DefaultDatasetForm):
#or
plugins.implements(plugins.IRoutes, inherit=True)
def before_map(self, m):
m.connect('amazing', #name of path route
'/amazing', #url to map path to
controller='ckanext.my_extension.controller:AmazingController', #controller
action='amazing') #controller action (method)
return m
..где ckanext.my_extension.controller
— это путь включения к my_extension/controller.py, который мы создадим далее. Он должен состоять из:
import ckan.plugins as p
from ckan.lib.base import BaseController
class AmazingController(BaseController):
def amazing(self):
return p.toolkit.render('amazing.html')
Вот и все. Теперь у вас есть контроллер, сопоставляющий URL с элементом навигации, который вы можете вызывать с помощью h.build_nav_main()
. Просто, верно? ;) Последняя вещь. Вам нужно будет перезапустить apache, чтобы он вступил в силу.
Изменить: в части header.html была опечатка.
person
Jon Weers
schedule
07.12.2013