如何在index.html模板中引入并渲染指定Markdown文件?
嘿,我完全懂你的需求——就是想直接把about.md渲染好的内容插到index.html模板里,不用先生成about.html再通过include引入对吧?咱们来聊聊具体怎么实现:
核心思路:别直接引用文件,找模板引擎的页面对象
你说的{{ about.md.content }}这种写法一般是行不通的,因为模板引擎不会直接通过文件路径解析出渲染后的内容。但几乎所有静态站点生成器(比如Jekyll、Eleventy这类用Liquid语法的)都提供了内置变量,可以让你拿到所有页面的解析后对象,然后直接调用它的内容。
举个Jekyll的例子(你提到{{ page.content }},大概率是用Jekyll)
Jekyll里所有页面都存在site.pages数组里,你可以先过滤出about.md对应的页面,再输出它的内容:
{% assign about_page = site.pages | where: "path", "about.md" | first %} {{ about_page.content }}
注意:path的值要和你项目里about.md的实际路径对应,如果它在pages/about.md文件夹里,就改成pages/about.md。
如果是Eleventy(11ty)的情况
Eleventy可以通过collections来获取页面,比如:
{% assign about_page = collections.all | find: "inputPath", "./about.md" %} {{ about_page.templateContent }}
要是你给about.md加了标签(比如tags: about),还能更简单:
{{ collections.about[0].templateContent }}
更省心的替代方案:抽离内容到公共模板
如果之后你可能需要在多个地方复用about的内容,不如把about.md里的核心内容抽成一个单独的_includes/about-content.md(或者.html),然后:
- 在
about.html里用{% include "about-content.md" %}插入内容 - 在
index.html里同样用{% include "about-content.md" %}引入
这样不用依赖页面对象,维护起来更灵活。
内容的提问来源于stack exchange,提问作者PizzaBeer
相关产品推荐
相关产品推荐

