Contents
简介
Pelican 是一个用 Python 实现的静态网站生成器。
- 通过 reStructuredText 或 MarkDown 语言,直接使用你的编辑器编写博客
- 使用简单的命令行工具生成博客
- 易于与版本控制工具和 WEB 应用配合使用
- 全静态输出可以方便的在任何地方部署
简单来说,就是你使用 reStructuredText 或者 MarkDown 来生写网站的具体内容,然后用这个工具根据你之前写的内容来生成对应的网页。
这个工具一般用来生成静态的博客是极好的,并且网上也很多技术人的博客也已经是这样来实现的。
本指南只讲解了一些有关 Pelican 的入门知识,如果你想了解更多,请移步 Pelican 中文文档 ,或者 Pelican 官方文档 。
安装
Pelican 的安装还是很简单的,因为它属于 Python 的一个第三方库,所以直接一条命令即可:
1 | $ pip install pelican
|
如果系统报没有 pip 这个命令,你可以点击 pip 的安装文档 。
依赖
到目前为止, Pelican 依赖于以下 Python 包:
Pelican 安装之后,依赖于以下的 Python 包都将会自动安装:
- feedgenerator, 生成 Atom
- jinja2, 模板支持
- pygments, 语法高亮
- docutils, 支持 reStructuredText 输入格式
- pytz, 定义时区
- blinker, 消息分发系统
- unidecode, Unicode 文件转码
- six, 兼容 Python2、3
- MarkupSafe, 安全标记字符串
如果需要以下安装包,可以通过 pip 命令手动安装:
- markdown, 支持 Markdown 格式输入
- typogrify, 增强排版
创建 Pelican 工程目录
首先创建一个 Pelican 工程目录 myblog (目录名称自定义):
1 2 3 | $ mkdir myblog
$ cd myblog
$ pelican-quickstart
|
运行 pelican-quickstart 后会有一堆的提示信息。
Where do you want to create your new web site? 你想在哪里创建你的网站,默认当前目录
What will be the title of this web site? 网站标题是什么?
Who will be the author of this web site? 网站作者?
What will be the default language of this web site? 网站默认语言?默认为 en,我一般写 zh。
Do you want to specify a URL prefix? 是否指定一个 URL 前缀
Do you want to enable article pagination? 文章是否需要分页?
How many articles per page do you want? 每页多少个文章? 默认 10 个。
Do you want to generate a Fabfile/Makefile to automate generation and publishing? 是否需要生成 Fabfile/Makefile 来对文档的生成和发布进行管理。 建议你选择是。
Do you want an auto-reload & simpleHTTP script to assist with theme and site development? 是否需要一个文档更改后能够自动更新的简单 HTTP 服务器。
建议也选择是。下面会讲到这个服务器,很有用。
下面的问题,都是问你通过哪种方面将你生成的网页上传到你的真实站点。
然后会在 myblog 目录中生成一些目录及文件,其结构
blog/ ├── content # 存放你要写的博客 │ └── (pages) # 单纯的页面 ├── output # 生成的输出文件 ├── develop_server.sh# 方便开启测试服务器 ├── Makefile # 方便管理博客的 Makefile ├── pelicanconf.py # 主配置文件 └── publishconf.py # 主发布文件,可删除
使用 Pelican 编写文章
Pelican 尽可能地会从文件系统中来获取信息(比如,获取文章分类的方式)。 但是你最好在文件的元数据中提供。
下面以 reStructuredText 为例。
1 2 3 4 5 6 7 | =============
|PL| 指南
=============
:date: 2014-06-22 10:00
:tags: pelican, python, blog
:category: 学习
|
Tip
除了标题外,其它元素都不是必须的。
如果没有日期, Pelican 是以对应文件的修改时间为日期。
如果没有分类, Pelican 将使用文件所放置的目录名称作为分类。
语法高亮
Pelican 使用 Pyments 来支持语法高亮,所以你可以在你的 reStructuredText 文档里使用如下方法:
1 2 3 | .. code-block:: identifier
your code
|
其中 identifier 必须存在与这个列表中 list of available lexers 的字段匹配。
Makefile
你可以直接在之前创建的 Pelican 的工程目录里面执行 make 命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $ make
Makefile for a pelican Web site
Usage:
make html (re)generate the web site
make clean remove the generated files
make regenerate regenerate files upon modification
make publish generate using production settings
make serve [PORT=8000] serve site at http://localhost:8000
make devserver [PORT=8000] start/restart develop_server.sh
make stopserver stop local server
make ssh_upload upload the web site via SSH
make rsync_upload upload the web site via rsync+ssh
make dropbox_upload upload the web site via Dropbox
make ftp_upload upload the web site via FTP
make s3_upload upload the web site via S3
make cf_upload upload the web site via Cloud Files
make github upload the web site via gh-pages
Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html
|
Pelican 的作者将所有 Pelican 的用到的功能都封装进去了。你可以不用理会 Pelican 提供的其它命令是如何使用的,直接使用 make 的各种子命令就可以了。
关于各个子命令,我下面穿插着讲到。
同时会也讲到这个子命令封装了 Pelican 提供的哪个原始命令。
make html
这个命令将当前 content 目录中的内容生成对应的网页,不过此命令生成的网页只是简单的 HTML 内容,并没有 CSS 样式之类。
make clean
直接清除整个 output 目录
make regenerate
如果每次检测到变化时,你希望 Pelican 会自动重新生成页面(本地测试都是基于手动生成),可以使用该命令。
它的生成的页面还是和 make html 是一样的,没有什么 CSS 样式。
make serve
启动一个后台服务,来显示生成的网页,不过当 content 目录内容更新时,该服务不会自动更新网页。
make devserver
同样也是启动一个后台服务,不过它会在 content 目录内容更新时,会自动更新网页内容。
make stopserver
停止用上面两个命令启动的后台服务。
其它 make 子命令
其它子命令都是用来上传生成的网页到指定服务器用的。
develop_server.sh
该命令开启一个测试用的服务器。 基本使用方法:
1 | $ ./develop_server.sh (start|stop|restart) [port]
|
可以看到,它的使用方法也是比较简单的:
- start 开启一个测试服务器,启动成功后,服务器会在后台运行
- stop 停止一个测试服务器
- restart 重启测试服务器
- port 绑定特定的端口号,默认为 8000
这个测试服务器比较方便的就是它会自动监控 content 目录中的文件,如果有新的文件生成、文件内容发生变化,它会立即生成新的页面(在浏览器里手动刷新即可看到新生成的页面),同时它也会在后台打印出详细的 debug 日志。
make devserver 其实就是对该命令一层简单封装。