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

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

插件的程式碼

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# -*- 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

小結

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