You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CKAN主题开发:首页组织卡片无法正常展示及组织显示数量限制设置求助

CKAN主题开发:首页组织卡片无法正常展示及组织显示数量限制设置求助

我看了你贴的代码,马上发现几个可能导致组织卡片不显示的小问题,咱们一步步来排查修复:

1. 控制器漏了toolkit的核心导入

这是最关键的问题!你的home.py里直接使用了toolkit.get_action(),但开头根本没导入ckan.plugins.toolkit,这会直接触发Python报错,导致组织数据根本获取不到,模板自然循环不出内容。

修改你的home.py开头部分,加上toolkit导入:

import ckan.lib.base as base
import ckan.plugins.toolkit as toolkit  # 新增这行核心导入!
from pylons import c

class HomeController(base.BaseController):
    def index(self):
        context = {'ignore_auth': True}
        datasets = toolkit.get_action('package_search')(context, {'rows': 6})['results']
        organizations = toolkit.get_action('organization_list')(context, {
            'all_fields': True,
            'include_dataset_count': True,
            'limit': 100
        })
        return base.render('home/index.html', extra_vars={
            'datasets': datasets,
            'organizations': organizations
        })

2. 模板变量的一致性优化(小细节)

你的数据集循环用的是{% for dataset in c.datasets %},但控制器通过extra_vars传递的变量名是datasets,虽然你说数据集能正常显示,但这属于不规范写法(依赖CKAN全局c对象的隐式变量),建议改成{% for dataset in datasets %},避免后续主题迭代时出问题。

3. 组织显示数量的调整

你已经在organization_list的参数里设置了limit: 100,如果需要显示所有组织,可以把这个值改成0(CKAN的API规则里,limit=0表示返回全部符合条件的组织):

organizations = toolkit.get_action('organization_list')(context, {
    'all_fields': True,
    'include_dataset_count': True,
    'limit': 0  # 改为0显示所有组织
})

4. 调试小技巧(如果修复后仍不显示)

如果做完以上修改,组织卡片还是没出来,可以在模板的组织循环前加一行调试代码,查看organizations变量的实际内容:

<h3 class="mb-3">Organizations</h3>
{{ organizations | pprint }}  <!-- 新增这行,查看变量原始内容 -->
<div class="row g-4">
{% for org in organizations %}
...

刷新首页后,你会看到organizations的原始数据:

  • 如果是空列表,就去CKAN的日志文件(通常在/var/log/ckan/目录下)里找具体报错;
  • 如果有数据,再检查模板里的HTML结构是否有CSS隐藏、标签闭合错误等问题。

最后记得重启你的CKAN服务(比如systemctl restart ckan或者重启uwsgi/nginx,根据你的部署方式),让代码修改生效~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 07:27:58