如何使用 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
的内容在插入之前被转义,导致类似 <a href="index.html">Home</a><a href="other.html">Other page</a>
的内容,这在实践中确实很安全,但对我没有帮助。
我想要的是另一个模板,比如 navigation.html
,其中包含在使用 pandoc 时要包含在我的主模板中的导航菜单。
如果这不可能,我想使用与上面相同的技术,但使用“未转义”navigation
参数(我不喜欢它,因为它会带来主要的安全性发布到项目中)。
我怎样才能做到这一点?
有两种解决方法:
在默认文件中使用 variables
而不是 metadata
。变量被逐字插入,而元数据将被转义。
要在模板中插入文件 navigation.html
,请使用 ${navigation.html()}
。 Pandoc 使用 doctemplates 包作为模板,有关更多详细信息,请参阅“partials”上的文档。
我正在使用 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
的内容在插入之前被转义,导致类似 <a href="index.html">Home</a><a href="other.html">Other page</a>
的内容,这在实践中确实很安全,但对我没有帮助。
我想要的是另一个模板,比如 navigation.html
,其中包含在使用 pandoc 时要包含在我的主模板中的导航菜单。
如果这不可能,我想使用与上面相同的技术,但使用“未转义”navigation
参数(我不喜欢它,因为它会带来主要的安全性发布到项目中)。
我怎样才能做到这一点?
有两种解决方法:
在默认文件中使用
variables
而不是metadata
。变量被逐字插入,而元数据将被转义。要在模板中插入文件
navigation.html
,请使用${navigation.html()}
。 Pandoc 使用 doctemplates 包作为模板,有关更多详细信息,请参阅“partials”上的文档。