You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pelican SSG:配置USE_FOLDER_AS_CATEGORY后URL未带目录的问题排查

问题根源

USE_FOLDER_AS_CATEGORY 这个配置仅对文章(Articles)生效,完全不会影响页面(Pages)的 category 字段赋值。你开启这个选项后,页面依然不会自动将所在文件夹识别为 category,所以 PAGE_URL 中的 {category} 变量为空,最终生成的 URL 就缺失了目录部分。

解决方案

要让页面自动继承所在文件夹的路径到 URL 中,需要通过 PATH_METADATA 配置从文件路径中提取目录信息,再结合 Jinja2 条件语法生成动态 URL:

修改你的 pelicanconf.py 为以下内容:

# 从页面文件路径中提取子目录(如果存在)和 slug
PATH_METADATA = r'pages/(?:(?P<subdir>[^/]+)/)?(?P<slug>[^/]+)\.md'

# 根据是否有子目录生成对应 URL
PAGE_URL = '{%- if subdir %}{subdir}/{% endif %}{slug}/'
PAGE_SAVE_AS = '{%- if subdir %}{subdir}/{% endif %}{slug}/index.html'

PAGE_PATHS = ['pages']
PAGE_TEMPLATE = 'page'

说明

  • PATH_METADATA 用正则表达式捕获:
    • 根目录下的 about.md:subdir 为空,slug 为 about
    • events 文件夹下的 conference.md:subdir 为 events,slug 为 conference
  • PAGE_URL 和 PAGE_SAVE_AS 通过 Jinja2 的 {% if %} 条件判断,当存在 subdir 时就将其加入路径,最终生成你期望的 /about 和 /events/conference 两个 URL。

如果你的页面有更深层级的目录(比如 /pages/events/2024/meetup.md),可以调整 PATH_METADATA 的正则来捕获完整子路径:

PATH_METADATA = r'pages/(?P<subpath>.+/)?(?P<slug>[^/]+)\.md'
PAGE_URL = '{subpath}{slug}/'
PAGE_SAVE_AS = '{subpath}{slug}/index.html'

这样会自动生成 /events/2024/meetup 这类嵌套 URL。

内容的提问来源于stack exchange,提问作者Malvinka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:52:35