Skip to content

如何使用插件自動在 Pelican 插入預設圖檔

Published: 3 分鐘

山姆鍋喜歡文章至少有張圖檔,沒有特別相關的主題的話,也希望可以顯示一張預設的圖。為了設定這個圖檔,文章的標頭資料(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

小結

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

郭信義 (Sam Kuo)

奔騰網路科技技術長,專長分散式系統、Web 應用與雲端服務架構、設計、開發、部署與維運。工作之餘,喜歡關注自由軟體的發展與應用,偶爾寫一下部落格文章。