设置Pelican文章分类

under blog pelican

in tech

Published: 2016-09-18

我一直将content目录下的第一级目录用作文章分类,以前这一级目录下就直接是reStructuredText文档,工作得很好,后来设了多级目录:

PATH_METADATA = '(?P<category>[^/]*)/(?P<date>\d{8})/(?P<slug>[^/]*)/(?P<lang>\w*)\.rst'

但同时为了简便,同时删除了URL里的分类信息,最近准备设置多个分类并把分类列表请回来,才发现设置多级目录后文章分类一直有问题,并不是我在PATH_METADATA里指定的第一级目录,而是和文章的slug一样是最后一级目录。

检查后发现是USE_FOLDER_AS_CATEGORY导致了PATH_METADATA失效,只要没有禁用USE_FOLDER_AS_CATEGORY,Pelican就会在先将路径最后一级目录的名称设置为category,并忽略后面任何设置category的尝试。将USE_FOLDER_AS_CATEGORY设为False就可以了。

最后总结一下,PATH_METADATAFILENAME_METADATAUSE_FOLDER_AS_CATEGORY可以这样配合使用:

PATH_METADATA = '(?P<date>\d{8})/(?P<slug>[^/]*)/[^/]*/[^/]*'  # Ignore file name and the last folder
USE_FOLDER_AS_CATEGORY = True  # Default
FILENAME_METADATA = '(?P<lang>\w*)'  # No file extension

2016年10月13日更新:

我提交了一个Pull Request,其目的之一是防止USE_FOLDER_AS_CATEGORY覆盖PATH_METADATAFILENAME_METADATA,现在它已被合并到主线中。

(完)