returns CKAN 中所有组的函数

Function that returns all the groups in CKAN

我想知道是否有人知道如何在 CKAN 中编写一个函数 returns 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 'get_all_groups' has not been defined.

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

非常感谢,

您的代码看起来很合理。您在评论中输入的错误表明您在定义辅助代码时遇到了问题。

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

  1. 在您的扩展中创建一个 helpers.py 文件(例如,在与 plugin.py 相同的目录中)并在其中编写您的辅助函数。参见示例:https://github.com/ckan/ckanext-harvest/blob/cc6cb3e3892714c8b4c574c024fc2e7243834f40/ckanext/harvest/helpers.py
  2. 在您的扩展程序 plugin.py 中,您的插件 class 需要 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. 中列出
  5. 重新启动 CKAN(例如 apache 或 'paster serve')

现在您可以在模板中调用辅助函数:{{ h.<helper-name> }}或像您所做的那样。