2022年5月5日 星期四

CKAN v2.9 templates 2: 取代預設的 template

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 plugins
import ckan.plugins.toolkit as toolkit

class 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]/



沒有留言:

張貼留言