Pelican 入门:一个基于 Python 的静态站点生成器

对于想要自托管简单网站或博客的 Python 用户来说,Pelican 是一个绝佳的选择。
294 位读者喜欢这篇文章。

如果您想创建一个自定义网站或博客,您有很多选择。许多提供商将托管您的网站并为您完成大部分工作。(WordPress 是一个非常受欢迎的选择。)但是,使用托管解决方案会失去一些灵活性。作为一名软件开发人员,我更喜欢管理自己的服务器,并在网站的运作方式上保持更大的自由度。

然而,管理网络服务器需要相当多的工作。安装它并启动一个简单的应用程序来提供内容很容易。但是,及时跟进安全补丁和更新非常耗时。如果您只想提供静态网页,那么拥有一个网络服务器和大量应用程序可能得不偿失。手动创建 HTML 页面也不是一个好的选择。

这就是静态站点生成器可以发挥作用的地方。这些应用程序使用模板来创建您想要的所有静态页面,并将它们与相关的元数据交叉链接。(例如,显示所有带有通用标签或关键字的页面。)静态站点生成器可以帮助您使用导航区域、页眉和页脚等元素创建一个具有通用外观和风格的网站。

我已经使用 Python 多年了。因此,当我第一次开始寻找生成静态 HTML 页面的工具时,我想要一个用 Python 编写的工具。主要原因是,我经常想深入了解应用程序的内部工作原理,而使用我已经熟悉的语言可以使这更容易。(如果这对您不重要,或者您不使用 Python,那么还有其他一些很棒的 静态站点生成器,它们使用 Ruby、JavaScript 和其他语言。)

我决定尝试一下 Pelican。它是一个常用的静态站点生成器,用 Python 编写。它直接支持 reStructuredText,并且在安装了所需的软件包后可以支持 Markdown。所有任务都通过命令行界面 (CLI) 工具执行,这对于任何熟悉命令行的人来说都很简单。其简单的快速入门 CLI 工具使创建网站变得非常容易。

在本文中,我将解释如何安装 Pelican 4、添加文章以及更改默认主题。(注意:这一切都是在 MacOS 上开发的;它应该在任何 Unix/Linux 版本上都能正常工作,但我没有 Windows 主机进行测试。)

安装和配置

第一步是创建一个 virtualenv 并安装 Pelican。

$ mkdir test-site
$ cd test-site
$ python3 -m venv venv
$ ./venv/bin/pip install --upgrade pip
...
Successfully installed pip-18.1
$ ./venv/bin/pip install pelican
Collecting pelican
...
Successfully installed MarkupSafe-1.1.0 blinker-1.4 docutils-0.14 feedgenerator-1.9 jinja2-2.10 pelican-4.0.1 pygments-2.3.1 python-dateutil-2.7.5 pytz-2018.7 six-1.12.0 unidecode-1.0.23

为了保持简单,我输入了标题和作者的值,并对 URL 前缀和文章分页回答了 N。(对于其余问题,我使用了给定的默认值。)

Pelican 的 quickstart CLI 工具将创建基本布局和一些文件以帮助您入门。运行 pelican-quickstart 命令。为了保持简单,我输入了标题作者的值,并对 URL 前缀和文章分页回答了 N。稍后在配置文件中更改这些设置非常容易。

$ ./venv/bin/pelican-quickstart
Welcome to pelican-quickstart v4.0.1.

This script will help you create a new Pelican-based website.

Please answer the following questions so this script can generate the files needed by Pelican.

> Where do you want to create your new web site? [.]
> What will be the title of this web site? My Test Blog
> Who will be the author of this web site? Craig
> What will be the default language of this web site? [en]
> Do you want to specify a URL prefix? e.g., https://example.com (Y/n) n
> Do you want to enable article pagination? (Y/n) n
> What is your time zone? [Europe/Paris]
> Do you want to generate a tasks.py/Makefile to automate generation and publishing? (Y/n)
> Do you want to upload your website using FTP? (y/N)
> Do you want to upload your website using SSH? (y/N)
> Do you want to upload your website using Dropbox? (y/N)
> Do you want to upload your website using S3? (y/N)
> Do you want to upload your website using Rackspace Cloud Files? (y/N)
> Do you want to upload your website using GitHub Pages? (y/N)
Done. Your new project is available at /Users/craig/tmp/pelican/test-site

您入门所需的所有文件都已准备就绪。

快速入门默认设置为欧洲/巴黎时区,所以在继续之前更改它。在您喜欢的文本编辑器中打开 pelicanconf.py 文件。查找 TIMEZONE 变量。

TIMEZONE = 'Europe/Paris'

将其更改为 UTC

TIMEZONE = 'UTC'

要更新社交设置,请在 pelicanconf.py 中查找 SOCIAL 变量。

SOCIAL = (('You can add links in your config file', '#'),
          ('Another social link', '#'),)

我将添加一个指向我的 Twitter 帐户的链接。

SOCIAL = (('Twitter (#craigs55)', 'https://twitter.com/craigs55'),)

注意结尾的逗号——它很重要。这个逗号帮助 Python 识别该变量实际上是一个集合。确保您不要删除该逗号。

现在您有了网站的基础。快速入门创建了一个带有多个目标的 Makefile。将 devserver 目标提供给 make 将在您的机器上启动一个开发服务器,以便您可以预览所有内容。Makefile 中使用的 CLI 命令假定是您 PATH 的一部分,因此您需要先 activate virtualenv

$ source ./venv/bin/activate
$ make devserver
pelican -lr /Users/craig/tmp/pelican/test-site/content o
/Users/craig/tmp/pelican/test-site/output -s /Users/craig/tmp/pelican/test-site/pelicanconf.py

-> Modified: theme, settings. regenerating...
WARNING: No valid files found in content for the active readers:
   | BaseReader (static)
   | HTMLReader (htm, html)
   | RstReader (rst)
Done: Processed 0 articles, 0 drafts, 0 pages, 0 hidden pages and 0 draft pages in 0.18 seconds.

将您喜欢的浏览器指向 http://localhost:8000 以查看您的简单测试博客。

Pelican test site 1

您可以在右侧看到 Twitter 链接,在左侧看到一些指向 Pelican、Python 和 Jinja 的链接。(Jinja 是一种很棒的模板语言,Pelican 可以使用它。您可以在 Jinja 的文档 中了解更多信息。)

添加内容

现在您有了一个基本网站,添加一些内容。首先,将一个名为 welcome.rst 的文件添加到网站的 content 目录中。在您喜欢的文本编辑器中,创建一个包含以下文本的文件

$ pwd
/Users/craig/tmp/pelican/test-site
$ cat content/welcome.rst

Welcome to my blog!
###################

:date: 20181216 08:30
:tags: welcome
:category: Intro
:slug: welcome
:author: Craig
:summary: Welcome document

Welcome to my blog.
This is a short page just to show how to put up a static page.

元数据行——日期、标签等——由 Pelican 自动解析。

在您编写文件后,devserver 应该输出如下内容

-> Modified: content. regenerating...
Done: Processed 1 article, 0 drafts, 0 pages, 0 hidden pages and 0 draft pages in 0.10 seconds.

在浏览器中重新加载您的测试站点以查看更改。

Pelican test site 2

元数据(例如,日期和标签)已自动添加到页面。此外,Pelican 自动检测到 intro 类别,并将该部分添加到顶部导航栏。

更改主题

使用像 Pelican 这样流行的开源软件最棒的部分之一是,许多用户会进行更改并将它们贡献回项目。许多贡献都以主题的形式出现。

网站的主题设置颜色、布局选项等。尝试新主题非常容易。您可以在 Pelican Themes 上预览许多主题。

首先,克隆 GitHub 仓库

$ cd ..
$ git clone --recursive https://github.com/getpelican/pelicanthemes
Cloning into 'pelicanthemes'...

因为我喜欢蓝色,所以我将尝试 blueidea 主题。

编辑 pelicanconf.py 并添加以下行

THEME = '/Users/craig/tmp/pelican/pelican-themes/blueidea/'

devserver 将重新生成您的输出。在浏览器中重新加载网页以查看新主题。

Pelican test site 3

主题控制布局的许多方面。例如,在默认主题中,您可以在文章旁边看到类别(Intro)和元标签。但该类别不会在 blueidea 主题中显示。

其他注意事项

这只是对 Pelican 的一个非常快速的介绍。还有几个重要的主题我没有涵盖。

首先,我犹豫转向静态站点的原因之一是它不允许对文章进行讨论。幸运的是,有一些第三方提供商会为您托管讨论。我目前正在看的一个是 Disqus

接下来,以上所有操作都在我的本地机器上完成。如果我想让其他人查看我的网站,我必须将预先生成的 HTML 文件上传到某个地方。如果您查看 pelican-quickstart 输出,您将看到使用 FTP、SSH、S3 甚至 GitHub Pages 的选项。每个选项都有其优点和缺点。但是,如果我必须选择一个,我可能会发布到 GitHub Pages。

Pelican 还有许多其他功能——我每天仍在学习更多关于它的知识。如果您想使用简单的静态内容自托管网站或博客,并且您想使用 Python,那么 Pelican 是一个绝佳的选择。它有一个活跃的用户社区,他们正在修复错误、添加功能并创建新的有趣主题。试试看!

标签
User profile image.
目前是 Aurora 的 SRE。我曾在大型公司和小公司工作过。我见证了惊人的增长(在 LinkedIn 和 NetApp),也看到了一些公司彻底崩溃。我热衷于 SRE(以及一般的 DevOps)如何改变在线软件的开发和管理方式。

3 条评论

./venv/bin/pelicanquickstart ----> ./venv/bin/pelican-quickstart

我对需要轻量级 Web 服务器的 LAN 设置更感兴趣。有什么建议吗?

如果您只是在询问 Web 服务器(不讨论任何类型的博客软件),那么我使用 nginx。这是我最近的所有公司都使用的,所以我对此最熟悉。

如果您正在寻找特定于 Python 的东西,那么我使用 Flask。它非常轻量级。但是,它非常简洁,这对我来说很有效。(顺便说一句;我大约一年前工作过的一家公司在 Django 上投入了大量资金。它运行良好,有很多花哨的功能。但是,当我尝试将其用于个人用途时,它有点难以驾驭。Flask 的“内置”功能少得多,但它很容易启动和运行。)

希望这有帮助。

回复 ,来自 ken

© . All rights reserved.