返回CKAN中所有组的函数

时间:2017-05-10 11:51:18

标签: ckan

我想知道是否有人知道如何在CKAN中编写一个返回CKAN中所有组的函数。

example_theme中有一个例子(但不适用于我),像这样(在helpers.py中):

def most_popular_groups():
    '''Return a sorted list of the groups with the most datasets.'''
    # Get a list of all the site's groups from CKAN, sorted by number of
    # datasets.
    groups = toolkit.get_action('group_list')(
        data_dict={'sort': 'packages desc', 'all_fields': True})

    # Truncate the list to the 10 most popular groups only.
    groups = groups[:10]

    return groups

然而,这对我来说没有用。

我在里面调用这个函数:

featured_group.html

{% set groups = h.most_popular_groups() %}

{% for group in groups %}
  <div class="box span3">
    {% snippet 'snippets/group_item.html', group=group, truncate=50, truncate_title=35 %}
  </div>
{% endfor %}

group_item.html:

{% block group_item %}
  <section class="group-list module module-narrow module-shallow">
    {% block group_item_header %}
      <header class="module-heading">
        {% set truncate=truncate or 0 %}
        {% set truncate_title = truncate_title or 0 %}
        {% set title = group.title or group.name %}
        {% block group_item_header_image %}
          <a class="module-image" href="{{ h.url_for(controller='group', action='read', id=group.name) }}">
            <img src="{{ group.image_display_url or h.url_for_static('/base/images/placeholder-group.png') }}" alt="{{ group.name }}" height="150pt" width="150pt"/>
          </a>
        {% endblock %}

        {% block group_item_header_title %}
          <h3 class="media-heading"><a href="{{ h.url_for(controller='group', action='read', id=group.name) }}">{{ group.title or group.name }}</a></h3>
        {% endblock %}
        <!--
        {% block group_item_header_description %}
          {% if group.description %}
            {% if truncate == 0 %}
              <p>{{ h.markdown_extract(group.description)|urlize }}</p>
            {% else %}
              <p>{{ h.markdown_extract(group.description, truncate)|urlize }}</p>
            {% endif %}
          {% endif %}
        {% endblock %}
    -->
      </header>
    {% endblock %}
    <!--
    {% block group_item_content %}
      {% set list_class = "unstyled dataset-list" %}
      {% set item_class = "dataset-item module-content" %}
      {% snippet 'snippets/package_list.html', packages=group.packages, list_class=list_class, item_class=item_class, truncate=120 %}
    {% endblock %}
    -->
  </section>
{% endblock %}

然而,它给了我500服务器错误。

拜托,有人可以帮我吗? 我只想用这个函数显示所有组

更新:我的apache2日志说明如下:

  

[Tue May 09 09:44:40.806982 2017] [:error] [pid 9054:tid   140156479076096] [remote 127.0.0.1:51908] HelperError:Helper   &#39; get_all_groups&#39;尚未定义。

我在哪里可以定义get_all_groups函数?只是创建一个新的python文件?如何从feature_group.html视图中调用它?

非常感谢,

1 个答案:

答案 0 :(得分:1)

您的代码看似合理。您在评论中提出的错误表明您在定义帮助程序代码时遇到问题。

定义模板'helper'(即可以在模板中运行python代码):

  1. 在您的扩展程序中创建一个helpers.py文件(例如,在与plugin.py相同的目录中)并在那里编写辅助函数。请参阅示例:https://github.com/ckan/ckanext-harvest/blob/cc6cb3e3892714c8b4c574c024fc2e7243834f40/ckanext/harvest/helpers.py
  2. 在您的扩展程序plugin.py中,您的插件类需要p.implements(p.ITemplateHelpers),然后使用get_helpers()方法命名并指向您的帮助程序函数。请参阅示例:https://github.com/ckan/ckanext-harvest/blob/cc6cb3e3892714c8b4c574c024fc2e7243834f40/ckanext/harvest/plugin.py#L283-L294
  3. 确保您已在ckan配置文件(.ini)中启用了该插件 - 即在ckan.plugins中列出。
  4. 重新启动CKAN(例如apache或'paster serve')
  5. 现在你可以在模板中调用辅助函数:{{ h.<helper-name> }}或者你已经完成了。