Again,为什么说again??早在2015年接触了到Pelican和GitHub Pages,结果架子搭好了,见:Hello Pelican,但8年间却一直没写东西。希望这次能坚持住。
OK,先升级pelican使得 blog重新工作。
注:只关注在pelican下的markdown的使用。
安装Pelican
好在pelican从python2到python3基本没有变化。
直接安装安装python3,并启用创建虚拟环境
1 |
|
激活虚拟环境
1 |
|
安装软件包
1 |
|
安装后记得生成新的 requirements.txt 文件
1 |
|
以便于后期使用(比如GitHub Actions中)
1 |
|
Pelican常用命令
直接执行pelican即可让它工作(生成静态页面)
1 |
|
它默认加载当前目录下的 pelicanconf.py
文件。如果要使用其他配置文件,可以通过命令行选项 -s
指定
1 |
|
运行结束后,用浏览器直接打开生成目录(output)下的文件即可看到效果。
也可以启动一个http server:
1 |
|
而后用浏览器访问 http://localhost:8000/
如果从头开始创建一个blog,可以使用quickstart命令
1 |
|
它生成的文件中包含makefile(供make使用)和task.py文件(供invoke使用),都可以直接删掉。
Pelican配置
Pelican默认生成2个配置文件pelicanconf.py和publicconf.py。前者默认使用,后者需要通过命令行使用(用于生成发布用的站点)。
- 详见 https://docs.getpelican.com/en/latest/settings.html
后者一般基于前者进行些改动,比如,它一般都包含:
1 |
|
插件
注意:Pelican 老的插件位于 https://github.com/getpelican/pelican-plugins。如果别的文章,介绍插件时直接指向这个东西,需要注意内容其是否过时。 2023-11-13。
新的插件(位于 https://github.com/pelican-plugins ),可以直接使用 pip 安装,比如
1 |
|
安装后,pelican会自动识别它,也无需在pelicanconf.py中配置PLUGINS变量。
注意pelican-search 依赖另外一个名为Stork的东西(Stork作者声明不再更新,但是pelican-search作者认为短期没有替换必要)。
执行如下命令,查看当前安装的插件
1 |
|
Article与Page
Blog的内容,一般都有时间属性,pelican将其归类于 article;而"关于",“联系方式” 等页面则不常变化,归于pages。
Pelican Markdown 语法
- https://docs.getpelican.com/en/stable/content.html
链接格式
主要关注下内部链接的语法,它支持变量。
- filename
要在一篇博客中引用另外的站内博客,需要使用 filename
1 2 |
|
- static
要在博客中显示静态资源中的图像,需要指定static 。
1 2 |
|
- attach
1 2 3 |
|
注意:pelican的变量格式,和常规的各个markdown编辑器支持的格式不一样。
建议方案:编写 Python Markdown 的 ProProcesser扩展,在内存中自动添加这些变量,以便于让pelican满意。
Meta信息
需要在文件头部添加一些信息,比如:
1 2 3 4 5 |
|
或者用yaml格式【需要使用相应扩展】
1 2 3 4 5 6 7 |
|
可用的 MetaData列表:
MetaData | 描述 |
---|---|
title |
标题(Article 或 Page) |
date |
发布日期, (YYYY-MM-DD HH:SS ) |
modified |
修改日期 (YYYY-MM-DD HH:SS ) |
tags |
逗号分隔 |
keywords |
逗号分隔 (HTML content only) |
category |
每个article只能指定一个类别) |
slug |
ID,当title有中文时,最好指定它(不然url中会用拼音)。 |
author |
作者 |
authors |
作者们 |
summary |
Brief description of content for index pages |
lang |
语言 (en , fr , etc.) |
translation |
当前article是否是另一个的翻译 (true or false ) |
status |
状态:draft , hidden , or published |
template |
Name of template to use to generate content (without extension) |
save_as |
Save content to this relative file path |
url |
URL to use for this article/page |
注意:title必须出现在第一行,不然会有下面这样的错误:
could not find information about 'title'
katex 支持
getpelican使用的python-markdown,理论上用其扩展markdown-katex就行了。
1 |
|
安装后,在getpelican下的启用方式:
1 2 3 4 5 6 7 8 9 10 |
|
注意,此处只添加了
markdown_katex
,之所以写这么多,是因为其他的是getplican的默认值,不能直接覆盖MARKDOWN变量,不然table、code 都会解析不正常。
20241024更新
当前blog 自己编写Markdown插件,不进行离线转换。速度只需数秒。
配置文件内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
mermaid 支持
同katex类似,python中的markdown有对merimad的扩展支持
1 |
|
- https://pypi.org/project/markdown-mermaidjs/
getpelican下,配置pelicanconf.py进行启用:
1 2 3 4 5 6 |
|
使用GitHub Action发布
目标:自动将生成的静态站点,发布到另外一个仓库中。
GitHub actions的market中有一些其他人些的action,用于发布pelican站点到pages。使用它会大大简化workflow文件,不过这儿用最原始的方式,希望可控性好一些。
在当前仓库中添加一个workflow文件:.github/workflows/pelican.yml
内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
为了将代码推送进另一个仓库,创建一个用于目标仓库的
Access Token
,而后将其作为secrets变量设置到当前仓库中MYBLOG_TOKEN
。Access Token创建方式(点击账户头像):
<Avatar> => Settings => Developer settings => Personal access tokens
参考
- https://docs.getpelican.com/en/latest/index.html *