我想知道是否有人知道如何在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视图中调用它?
非常感谢,
答案 0 :(得分:1)
您的代码看似合理。您在评论中提出的错误表明您在定义帮助程序代码时遇到问题。
定义模板'helper'(即可以在模板中运行python代码):
helpers.py
文件(例如,在与plugin.py相同的目录中)并在那里编写辅助函数。请参阅示例:https://github.com/ckan/ckanext-harvest/blob/cc6cb3e3892714c8b4c574c024fc2e7243834f40/ckanext/harvest/helpers.py plugin.py
中,您的插件类需要p.implements(p.ITemplateHelpers)
,然后使用get_helpers()方法命名并指向您的帮助程序函数。请参阅示例:https://github.com/ckan/ckanext-harvest/blob/cc6cb3e3892714c8b4c574c024fc2e7243834f40/ckanext/harvest/plugin.py#L283-L294 ckan.plugins
中列出。现在你可以在模板中调用辅助函数:{{ h.<helper-name> }}
或者你已经完成了。