山姆鍋喜歡文章至少有張圖檔,沒有特別相關的主題的話,也希望可以顯示一張預設的圖。為了設定這個圖檔,文章的標頭資料(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 ⎘
小結
利用一個簡單的插件,山姆鍋示範如何在產生網頁內容時插入需要的標頭資料,透過同樣的技巧,讀者也可以增加所需的內容。