山姆鍋喜歡文章至少有張圖檔 , 沒有特別相關的主題的話 , 也希望可以顯示一張預設的圖 。 為了設定這個圖檔 , 文章的標頭資料 (metadata) 中 , 我使用 'image' 這個標頭來表示圖檔相對路徑 。 在樣板主題 (theme) 中 , 如果有這個標頭就插入該圖檔 , 否則就使用預設圖檔 。 如果在每個樣板需要插入這個圖檔的樣板或者 RSS 中 , 都需要做這樣的判斷 , 就有點麻煩 。 本文山姆鍋介紹使用簡單的插件 , 來插入這個預設標頭 , 確保所有文章都會有這個標頭存在 。

山姆鍋假設讀者已經知道 Pelican 基本的插件運作原理 , 如果沒有的話 , 可以參考 Pelican 插件文件

插件的程式碼

此程式碼路徑爲 /plugins/default-image/default_image.py

# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals

from pelican import signals
from pelican.contents import Article

def insert_image(instance):
    """
    Inserts an image meta if not already existent.
    """
    if isinstance(instance, Article):  # 1
        default_image = instance.settings['DEFAULT_IMAGE'] # 2
        if not hasattr(instance, 'image'): # 3
            instance.image = default_image
        return instance


def register():
    signals.content_object_init.connect(insert_image)

其中 , 標示 1 的敘述目的在過濾掉非文章的項目 , 標示 2 是為了讀取 DEFAULT_IMAGE 這個設定值 , 也就是預設圖檔的路徑 。 3 則是為了判斷文章是否已經所需的標頭資料 , 如果有則跳過 。

詳細程式碼與設定 , 請參考 本部落格的源始碼

參考資料

Pelican 插件文件 : http://docs.getpelican.com/en/stable/plugins.html

本部落格的源始碼 : https://github.com/sampot/sampot.github.io

小結

利用一個簡單的插件 , 山姆鍋示範如何在產生網頁內容時插入需要的標頭資料 , 透過同樣的技巧 , 讀者也可以增加所需的內容 。