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 在模板中编写代码):
- 在您的扩展中创建一个
helpers.py
文件(例如,在与 plugin.py 相同的目录中)并在其中编写您的辅助函数。参见示例:https://github.com/ckan/ckanext-harvest/blob/cc6cb3e3892714c8b4c574c024fc2e7243834f40/ckanext/harvest/helpers.py
- 在您的扩展程序
plugin.py
中,您的插件 class 需要 p.implements(p.ITemplateHelpers)
然后是一个 get_helpers() 方法来命名并指向您的辅助函数。参见示例:https://github.com/ckan/ckanext-harvest/blob/cc6cb3e3892714c8b4c574c024fc2e7243834f40/ckanext/harvest/plugin.py#L283-L294
- 确保您已在 ckan 配置文件 (.ini) 中启用该插件 -
即在
ckan.plugins
. 中列出
- 重新启动 CKAN(例如 apache 或 'paster serve')
现在您可以在模板中调用辅助函数:{{ h.<helper-name> }}
或像您所做的那样。
我想知道是否有人知道如何在 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 在模板中编写代码):
- 在您的扩展中创建一个
helpers.py
文件(例如,在与 plugin.py 相同的目录中)并在其中编写您的辅助函数。参见示例:https://github.com/ckan/ckanext-harvest/blob/cc6cb3e3892714c8b4c574c024fc2e7243834f40/ckanext/harvest/helpers.py - 在您的扩展程序
plugin.py
中,您的插件 class 需要p.implements(p.ITemplateHelpers)
然后是一个 get_helpers() 方法来命名并指向您的辅助函数。参见示例:https://github.com/ckan/ckanext-harvest/blob/cc6cb3e3892714c8b4c574c024fc2e7243834f40/ckanext/harvest/plugin.py#L283-L294 - 确保您已在 ckan 配置文件 (.ini) 中启用该插件 -
即在
ckan.plugins
. 中列出
- 重新启动 CKAN(例如 apache 或 'paster serve')
现在您可以在模板中调用辅助函数:{{ h.<helper-name> }}
或像您所做的那样。