如何使用 pandoc 在另一个模板中包含一个模板?

How can I include a template in another with pandoc?

我正在使用 Markdown 文件创建一系列网页(称其为网站可能会让人皱眉)。我使用通用模板来显示具有相似外观的每个页面:它们都有相同的页眉、页脚等。

我想添加一个导航菜单,以便链接到其他页面。我可以很容易地自己生成菜单,我不知道如何将它插入到页面中。

我试过的是:

options.yml(由 Python 脚本生成):

metadata:
  title: My very excellent title
  navigation: <a href="index.html">Home</a><a href="other.html">Other page</a>
standalone: true
template: template.html

template.html:

<!doctype HTML>

<title>$title$</title>

<header>Yeepee, header!</header>

<nav>$navigation$</nav>

<main>$body$</main>

<footer>Best footah evah</footer>

然后我 运行 脚本:pandoc -d options.yml index.md -o index.html(其他文件也一样,在 Python 脚本的循环中)

结果是我的 metadata.navigation 的内容在插入之前被转义,导致类似 &lt;a href="index.html"&gt;Home&lt;/a&gt;&lt;a href="other.html"&gt;Other page&lt;/a&gt; 的内容,这在实践中确实很安全,但对我没有帮助。

我想要的是另一个模板,比如 navigation.html,其中包含在使用 pandoc 时要包含在我的主模板中的导航菜单。

如果这不可能,我想使用与上面相同的技术,但使用“未转义”navigation 参数(我不喜欢它,因为它会带来主要的安全性发布到项目中)。

我怎样才能做到这一点?

有两种解决方法:

  1. 在默认文件中使用 variables 而不是 metadata。变量被逐字插入,而元数据将被转义。

  2. 要在模板中插入文件 navigation.html,请使用 ${navigation.html()}。 Pandoc 使用 doctemplates 包作为模板,有关更多详细信息,请参阅“partials”上的文档。