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

咨询Jekyll自定义文件名实现及标签动态生成页面的方法

嘿,这个需求在Jekyll里完全能搞定!你说的基于标签自动生成对应页面的功能,在Jekyll圈子里一般叫标签归档页生成,本质是利用Jekyll的模板系统和内置的站点数据来实现动态页面输出。下面分两部分给你讲清楚:

关于自定义文件名

当然可以!Jekyll允许你通过文章Front Matter里的permalink字段,直接指定单篇文章最终生成的路径(也就是自定义文件名)。比如你在posts/somepost.md里这么写:

---
name: Some Post
tags: ["tag_a", "tag_b"]
permalink: /my-custom-folder/tagged-post.html
---

编译后就会生成my-custom-folder/tagged-post.html这个文件,路径完全由你控制。如果想批量统一设置所有文章的路径规则,也可以在_config.yml里配置全局的permalink,比如:

permalink: /posts/:year/:month/:title/

这样所有文章都会按照「年/月/标题」的路径生成,但单篇文章里的permalink会优先覆盖全局规则,灵活性拉满。

生成标签专属页面的方案

这部分分两种场景,看你是手动维护少量标签,还是需要自动处理大量动态新增的标签:

场景1:标签数量少,手动维护

这种情况最简单,直接给每个标签创建单独的页面文件即可:

  1. 先写一个标签页面的模板,比如在_layouts/tag.html里:
---
layout: default # 替换成你自己的默认布局
---
<h1>标签:{{ page.tag }}</h1>

<!-- 列出所有带这个标签的文章 -->
<ul class="post-list">
  {% for post in site.posts %}
    {% if post.tags contains page.tag %}
      <li>
        <a href="{{ post.url }}">{{ post.name }}</a>
        <time>{{ post.date | date: "%Y-%m-%d" }}</time>
        <p>{{ post.excerpt | strip_html | truncatewords: 25 }}</p>
      </li>
    {% endif %}
  {% endfor %}
</ul>
  1. 在tags/目录下创建对应标签的md文件,比如tags/tag_a.md:
---
layout: tag
tag: tag_a
permalink: /tags/tag_a.html
---

tags/tag_b.md同理,Jekyll编译时会自动用模板渲染出对应的tags/tag_a.html和tags/tag_b.html页面。

场景2:标签多或动态新增,自动生成

如果标签经常新增,手动创建文件太麻烦,可以用Jekyll的生成器插件来自动遍历所有标签并生成页面:

  1. 先创建刚才的_layouts/tag.html模板(和场景1里的一样就行)。
  2. 在项目根目录下新建_plugins/tag_generator.rb文件,写入以下Ruby代码:
module Jekyll
  class TagPageGenerator < Generator
    safe true

    def generate(site)
      # 遍历所有站点标签
      site.tags.each do |tag, posts|
        # 为每个标签创建一个页面
        site.pages << TagPage.new(site, site.source, tag, posts)
      end
    end
  end

  class TagPage < Page
    def initialize(site, base, tag, posts)
      @site = site
      @base = base
      @dir = "tags" # 页面生成的目录
      @name = "#{tag}.html" # 页面文件名

      self.process(@name) # 处理文件名
      # 加载标签页面模板
      self.read_yaml(File.join(base, "_layouts"), "tag.html")
      # 给模板传递标签变量
      self.data["tag"] = tag
      self.data["title"] = "标签:#{tag}"
    end
  end
end
  1. 启动Jekyll编译时,这个插件会自动读取site.tags里的所有标签,为每个标签生成tags/tag_name.html页面,完全不用手动创建文件。

注意:如果你是用GitHub Pages托管站点,自定义Ruby插件是不被支持的,这时候可以改用Jekyll的Collections功能:
在_config.yml里添加:

collections:
  tags:
    output: true
    permalink: /tags/:name.html

然后在_tags/目录下创建每个标签的md文件(和场景1类似),虽然还是手动创建,但可以统一管理标签的额外信息(比如标签描述),而且路径会自动按照配置生成。

内容的提问来源于stack exchange,提问作者Bob van Luijt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:10:03