为pelican添加子站点功能


Table of Contents

创建翻译

babel-init:
    cd $(THEMEDIR) && pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot ./ && pybabel init -i messages.pot -d translations -l en

babel-update:
    cd $(THEMEDIR) && pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot ./ && pybabel update -i messages.pot -d translations

babel-compile:
    cd $(THEMEDIR) && pybabel compile -d translations

动态变量

在模板里,我有一些动态变量需要翻译,比如在分类里的 Python 需要翻译成 生活苦短,但很不幸, Babel …

为pelican添加文章加密功能


pelican是一个静态博客系统,很早之前就想要实现一个加密pelican文章的功能,但一直没什么时间,这次总算静下心花两天时间搞定了

为什么不用现有的插件encript-content

因为自己实现更有成就感啊!!!

前言

因为我不仅有静态博客honmaple.me,还有一个动态博客honmaple.com,所以此次加密功能我会在动态博客那边添加一个验证密码的接口,来对密码进行验证以及对加密文章进行解密,虽然验证也可以使用crypto-js.js进行双向解密,但还是觉得自定义的接口更安全一些。

自定义pelican插件

加密算法

加密算法我使用cryptography,使用起来很简单

>>> from cryptography.fernet import Fernet
>>> # Put this somewhere safe!
>>> key = Fernet.generate_key()
>>> f = Fernet(key)
>>> token = f.encrypt(b"A really secret message. Not for …

为pelican增加上一篇下一篇功能


功能实现很简单, pelican也有类似的插件实现 https://github.com/getpelican/pelican-plugins/tree/master/neighbors

不过自己实现起来更爽不是吗? 而且类似prev_article_in_categoryprev_article_in_subcategory的功能我并不需要

首先参考pelican的文档,基础实现

def add_neighbors(generator):
    ....

def register():
    signals.article_generator_finalized.connect(add_neighbors)

然后在generator.articles列表上进行操作,为article增加previous_articlenext_article对象

先进行排序(按时间)

articles = generator.articles
articles.sort(key=(lambda x: x.date), reverse=True)

然后可以使用iter关键字,把列表变成生成器,使用next()( python2用a.next(),python3用a.__next__())获取下一个可迭代对象

pre_article …

使用pelican搭建个人博客


pelican介绍

Pelican是一个用Python语言编写的静态网站生成器,支持使用restructuredText和Markdown写文章,配置灵活,扩展性强

pelican安装

$ sudo pip install pelican

安装markdown

$ sudo pip install markdown

pelican使用

工具准备好了,接下来就开始使用

$ cd git
$ mkdir pelican  #建立一个文件夹(位置和名称随意,自己记得就行)
$ cd pelican
$ pelican-quickstart

显示 (也可以直接回车默认)

Welcome to pelican-quickstart v3.4.0.

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 …