http://docs.ckan.org/en/2.9/theming/templates.html#replacing-a-default-template-file
每個 CKAN 網頁都由對應的 template 產生,如:
- /index --> ckan/templates/home/index.html
- /about --> ckan/templates/home/about.html
- /dataset --> ckan/templates/package/search.html
要自訂,plugin 需註冊一個包含 template 的 template 目錄來覆寫 CKAN 的預設內容。
延續上個 CKAN templates Tutorial 1(v2.9): 空的example_theme。
修改 plugin.py
修改 ckanext-example_theme/ckanext/example_theme/plugin.py,如下:
import ckan.plugins as pluginsimport ckan.plugins.toolkit as toolkitclass ExampleThemePlugin(plugins.SingletonPlugin):plugins.implements(plugins.IConfigurer)def update_config(self, config):toolkit.add_template_directory(config, 'templates')
程式中:
- import ckan.plugins.toolkit as toolkit
plugins toolkit 是 Python module 提供 CKAN plugins 必要的 functions, classes 及 exceptions。 - plugins.implements(plugins.IConfigurer)
實作 plugins.IConfigurer - def update_config
實作 plugins.IConfigurer 介面的 update_config。
CKAN 會在啟動時呼叫 IConfigurer 介面的 update_config,讓我們有機會修改 CKAN 的設定。 - ckan.plugins.toolkit.add_template_directory 向 CKAN 註冊 template 目錄,告訴 CKAN 產生/render 網頁時來找這個plugin目錄下的 templates 目錄。
只要與 CKAN 預設 template 同名的檔案就會取代掉原本的。
查看 CKAN 使用的 template
修改 /etc/ckan/default/ckan.ini 中的 debug = true。
重新載入 CKAN 首頁,會看到下方有個 Debug 連結,按下後展開 debug footer 顯示許多偵錯資訊,其中便有產生此網頁的 template 檔名。
Template name: home/index.html
Template path: /usr/lib/ckan/default/src/ckan/ckan/templates/home/index.html
大部分的 CKAN 網頁由多個 template 產生,第一個是 root template,其它則是相關的 included 檔。
覆寫 home/index.html
在 ckanext-example_theme 目錄下為要覆寫的 template 建立對應的目錄及檔案,如:
ckanext/
example_theme/
templates/
home/
index.html
編輯 index.html 如下:
Hello new Index Page! 中文也沒問題!
如果執行 ckan 沒有用 -r(--disable-reloader) 選項,如此修改 Python file, template file, CKAN config file, 或其它 CKAN file 都不需重啟伺服器。但如果是新加檔案、目錄就要重啟。
測試
重新瀏覽 http://[你的IP]/
沒有留言:
張貼留言