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
相关产品推荐
相关产品推荐

