gpt4 book ai didi

python - 在 Pelican 中从文件名自动生成标题

转载 作者:行者123 更新时间:2023-12-05 07:00:44 28 4
gpt4 key购买 nike

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 :

  1. 运行 Pelican 构建:

    pelican content -s pelicanconf.py --fatal warnings --verbose
  2. 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 .

5.2.2.为什么不好

文件名中的空格是一种不好的做法 — 1 , 2 , 3 , 4 , 5 .

最佳答案

pelican 似乎没有提供实现您想要的方法的方法。FILENAME_METADATA 正则表达式只能从文件名中选择一个名称,但不能用空格替换 -

所以我认为目前最好的方法是在每个文件中手动指定 title 标签。

关于python - 在 Pelican 中从文件名自动生成标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64058029/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com