Pelican系列:开启写作人生

博文和页面的区别

Articles: 博文,是指具体写的文章。

Pages: 页面,一般指一些固定不变的页面,比如关于等

元数据

元数据可以进行一些搜索引擎的优化,包含博文的一些基础信息。

如果用reStructuredText来编写内容的话,可以像下面这样写元数据头

My super title
##############

:date: 2010-10-03 10:20
:modified: 2010-10-04 18:40
:tags: thats, awesome
:category: yeah
:slug: my-super-post
:authors: Alexis Metaireau, Conan Doyle
:summary: Short version for index and feeds

多个标签(tags)和多个作者(authors)可以用逗号分割。

:tags: pelican, publishing tool; pelican, bird
:authors: Metaireau, Alexis; Doyle, Conan

Pelican 还支持在reStructuredText中写abbr标签,使用方法如下

This will be turned into :abbr:`HTML (HyperText Markup Language)`.

同样可以使用Markdown语法(以.md,.markdown,.mkd,.mdown结尾的文件),Markdown生成html文件需要Markdown的模块支持,通过命令pip install markdown安装。

Pelican 还支持Markdown的扩展语法,Markdown的扩展没有包含在Markdown的模块下面,需要通过MD_EXTENSIONS进行配置。

用Markdown写文章的基本格式如下

Title: My super title
Date: 2010-12-03 10:20
Modified: 2010-12-05 19:30
Category: Python
Tags: pelican, publishing
Slug: my-super-post
Authors: Alexis Metaireau, Conan Doyle
Summary: Short version for index and feeds

This is the content of my super blog post.

还可以用插件支持更多的格式,这个以后研究了。

Pelican也能直接解析html和htm文件,解析html文件就比较直接了,跟复制没啥区别。

<html>
    <head>
        <title>My super title</title>
        <meta name="tags" content="thats, awesome" />
        <meta name="date" content="2012-07-09 22:28" />
        <meta name="modified" content="2012-07-10 20:14" />
        <meta name="category" content="yeah" />
        <meta name="authors" content="Alexis Métaireau, Conan Doyle" />
        <meta name="summary" content="Short version for index and feeds" />
    </head>
    <body>
        This is the content of my super blog post.
    </body>
</html>

温馨提示:除了标题之外,其他元数据不是必填项,如果没有指定时间且DEFAULT_DATE设置为'fs',Pelican就会根据文件的时间戳来确定时间,文章的分类可以根据子目录的名称来确定,例如:python/foobar/myfoobar.rst的分类就行foobar,如果不希望子目录的名称不作为分类名称,可以通过设置USE_FOLDER_AS_CATEGORYFalse

modified是值最后编辑文章的时间,默认和date相同。另外,可以通过modified进行RSS推送,可能在刚写文章的时候RSS已经推送了一遍,后来进行了修改,就可以通过modified进行再次推送。

authors用来表示多个作者,如果只有一个作者,可以使用author

如果希望文章的摘要有一个确定的长度,可以通过设置SUMMARY_MAX_LENGTH,Pelican会从文章的开头进行截取制定的长度作为摘要。

也可以通过设置FILENAME_METADATA文件名称来提取元数据,默认情况下,FILENAME_METADATA只是提出文件名上面的的日期信息,如果希望提出文件名中的除日期信息之外的内容为slug,可以将FILENAME_METADATA设置为:'(?P<date>\d{4}-\d{2}-\d{2})_(?P<slug>.)'*

需要注意的是,在文件头编写的元数据信息会覆盖通过文件名提取出来的信息。

页面

如果在content下面创建了目录pages,这个目录下所有的文件都将被生成静态页面,比如About和Contact页面。

可以通过设置DISPLAY_PAGES_ON_MENU来控制页面是否在导航栏显示,默认情况是True

如果希望页面不在导航条上显示,可以在页面的元数据里面添加:status: hidden属性,对于404页面很有效果,因为404静态页面我们是不希望在导航条上面显示的。

引用内部的链接

从Pelican3.1开始,可以通过content的目录结构在不同的文章之间进行链接,这样可以很方便引用操作了。

引用content里面的的内容的语法是:{filename}path/to/file{fielname}是必填内容,可以同时支持Linux和windows

假设content的目录结构是这样的

website/
├── content
│   ├── category/
│   │   └── article1.rst
│   ├── article2.md
│   └── pages
│       └── about.md
└── pelican.conf.py

article1.rst中链接代码

The first article
#################

:date: 2012-12-01 10:02

See below intra-site link examples in reStructuredText format.

`a link relative to the current file <{filename}../article2.md>`_
`a link relative to the content root <{filename}/article2.md>`_

article2.md

Title: The second article
Date: 2012-12-01 10:02

See below intra-site link examples in Markdown format.

[a link relative to the current file]({filename}category/article1.rst)
[a link relative to the content root]({filename}/category/article1.rst)

链接静态文件

有时候我们需要引用一些除了博客和页面以为的资源,比如图片,PDF文件等,这就需要在pelicanconf.py中配置STATIC_PATHS属性,Pelican默认设置content下的images为图片资源,其他的资源需要进行配置。

假设content的目录结构如下

content
├── images
│   └── han.jpg
├── pdfs
│   └── menu.pdf
└── pages
    └── test.md

test.md中引用

![Alt Text]({filename}/images/han.jpg)
[Our Menu]({filename}/pdfs/menu.pdf)

pelicanconf.py新增配置

STATIC_PATHS = ['images', 'pdfs']

生产页面时,Pelican会将han.jpg复制到output/images/han.jpgmenu.pdf复制到output/pdfs/menu.pdf,同时将链接适配到test.md

附件

从Pelican 3.5开始,通过{attach}path/to/file可以给文章或者页面添加附件,语法和{filename}类似,但是附件会被复制到文章或者页面的同一个目录下面。这种方式只有在STATIC_PATHS设置了该目录才能使用这个标签。

假设content的目录结构如下

content
├── blog
│   ├── icons
│   │   └── icon.png
│   ├── photo.jpg
│   └── testpost.md
└── downloads
    └── archive.zip

pelicanconf.py的配置如下

PATH = 'content'
STATIC_PATHS = ['blog', 'downloads']
ARTICLE_PATHS = ['blog']
ARTICLE_SAVE_AS = '{date:%Y}/{slug}.html'
ARTICLE_URL = '{date:%Y}/{slug}.html'

testpost.md的内容如下

Title: Test Post
Category: test
Date: 2014-10-31

![Icon]({attach}icons/icon.png)
![Photo]({attach}photo.jpg)
[Downloadable File]({attach}/downloads/archive.zip)

生成之后的output的目录结构如下

output
└── 2014
    ├── archive.zip
    ├── icons
    │   └── icon.png
    ├── photo.jpg
    └── test-post.html

如果使用{attach}引用文章所在目录之外的资源,在生成文件的时候会将这个资源复制到文章所在的目录下。

如果资源被多篇文章通过{attach}引用,在第一个被引用的地方Pelican会以attach的方式来处理这个资源,在之后的引用的地方会按照{filename}的方式来链接这个资源,也就是说,在同一个目录下同一个资源被多次引用,Pelican只复制一次这个资源到该目录下面。

请谨慎使用多篇文章引用同一个资源,因为Pelican对{attach}资源处理的顺序是不确定的,就可能导致资源复制到不确定的目录下面,只有当所有的引用同一个资源的文章在同一个目录下面的时候才是安全的。

链接标签和分类

链接标签和分类的语法为{tag}tagname{category}foobar

语法高亮

Pelican为代码块提供了语法高亮功能,对于reStructuredText用户,可以使用code-block标记,假设我们要高亮Python的代码。

.. code-block:: python

   print("Pelican is a static site generator.")

对于Markdown用户,按照以下语法

There are two ways to specify the identifier:

    :::python
    print("The triple-colon syntax will *not* show line numbers.")

To display line numbers, use a path-less shebang instead of colons:

    #!python
    print("The path-less shebang syntax *will* show line numbers.")

如果是普通的代码,分不出具体语言的,可以按照如下语法格式,用一对```包起代码

发布草稿

有时候我们希望把我们的草稿先发布出来给部分朋友看看,不让文章在首页和分类列表里面显示出来,我们可以在文章中添加Status: draft属性。

如果将所有刚写好的文章都作为草搞件发布的话,可以在配置文件中配置DEFAULT_METADATA
属性

DEFAULT_METADATA = {
        'status': 'draft',
}

这样文章在发布的时候默认就是草稿,通过修改文章的配置为Status: published将文章正式发布出来。

文章同步发布在我的个人站点: http://www.xinxingzhao.com/blog/2016/03/25/pelican-writing-content.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,930评论 1 332
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,642评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,928评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,639评论 0 193
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,806评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,698评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,139评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,864评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,485评论 0 230
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,955评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,355评论 1 243
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,811评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,300评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,840评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,464评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,577评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,628评论 2 249

推荐阅读更多精彩内容