1。总结
我无法自动生成正确的 title
来自文章/页面的文件名。
比如我不能自动生成metadata key title
Kira Goddess
来自文章Kira-Goddess.md
2。争论
DRY , 自动化。如果可以自动完成,我不想每次都为每篇文章和页面手动编写标题。
一个异常(exception)——带有单词的文件,其中包含连字符——“众所周知”、“说英语”。在这种情况下,我必须明确指定 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
标签。
关于python - 在 Pelican 中从文件名自动生成标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64058029/