问题描述
1。摘要
例如,我无法自动根据文章Kira Goddess
生成metadata key title
Kira-Goddess.md
2。争论
DRY,自动化。如果可以自动完成,我不想每次都为每个文章和页面手动写标题。
一个例外-包含连字符的单词文件-“知名”,“说英语”。在这种情况下,我必须在文章的元数据中明确指定title
。但是在我的文章文件名中,带有连字符的单词很少见。
3。 MCVE
3.1。数据
您可以在我的存储库的KiraTitleFromFilename
branch中查看它,以进行Pelican调试。
-
pelicanconf.py
:"""MCVE.""" AUTHOR = 'Sasha Chernykh' SITENAME = 'SashaPelicanDebugging' SITEURL = '.' PATH = 'content' TIMEZONE = 'Europe/Moscow' DEFAULT_LANG = 'en' # [INFO] Use article name when preserve the slug: # https://docs.getpelican.com/en/stable/settings.html#url-settings SLUGIFY_SOURCE = 'basename' # [INFO] Preserve case of article filename SLUGIFY_PRESERVE_CASE = True # [INFO] Get title from article filename: # https://docs.getpelican.com/en/stable/settings.html#Metadata # https://github.com/getpelican/pelican/issues/2107 # https://github.com/getpelican/pelican/commit/2e82a53cdf3f1f9d66557850cc2811479d5bb645 FILENAME_MetaDATA = '(?P<title>.*)'
-
Kira-Goddess.md
:Date: 2020-09-24 18:57:33 Kira Goddess!
由pelican-quickstart生成的另一个Pelican文件。
base.html
的简化部分:
<title>{{ article.title }}</title>
3.2。复制步骤
请参见.travis.yml
:
-
运行Pelican构建:
pelican content -s pelicanconf.py --fatal warnings --verbose
-
Finding content of
<title>
tag:grep -E "<title>.*</title>" output/Kira-Goddess.html
3.3。行为
3.3.1。当前请参见Travis build:
<title>Kira-Goddess</title>
3.3.2。期望的
如果这样的话,那就太好了
<title>{{ article.title }}</title>
将转换为:
<title>Kira Goddess</title>
4。没有帮助
在我读到的description of EXTRA_PATH_METADATA
变量中,Pelican使用了Python group name notation语法(?P<name>…)
。我找不到如何在Python <class 'str'>
(print(type(FILENAME_MetaDATA))
→<class 'str'>
)中进行替换的方法。我尝试了以下变体形式:
import re
KIRA_DEFAULT_FILENAME_REGEX = '(?P<title>.*)'
FILENAME_MetaDATA = re.sub(KIRA_DEFAULT_FILENAME_REGEX,"-"," ")
或
KIRA_DEFAULT_FILENAME_REGEX = '(?P<title>.*)'
FILENAME_MetaDATA = KIRA_DEFAULT_FILENAME_REGEX.replace("-","")
它不起作用。
5。不提供
5.1。在模板中使用Jinja2过滤器
5.1.1。建议 Use replace()
filter在您的模板文件中,如下所示:
<title>{{ article.title|replace('-'," ") }}</title>
5.1.2。为什么不好
Pelican插件(例如Pelican Open Graph)仍将使用article.title
。不需要的数据,Kira-Goddess
而不是Kira Goddess
仍将传递给插件。
5.2。在Markdown中使用空格
5.2.1。建议例如,将文件命名为Kira Goddess.md
,而不是Kira-Goddess.md
。
解决方法
pelican
似乎没有提供实现所需内容的方法。
FILENAME_METADATA
正则表达式只能从文件名中选择一个名称,但不能用空格替换-
。
因此,我认为目前最好的方法是在每个文件中手动指定title
标记。