4

我无法在我的降价文件中重用模板代码。例如,我想提取 vimeo 链接的嵌入代码,然后将 vimeo id 传递给调用。

一个示例宏:

{% macro vimeoEmbed(id) %}
  <iframe src="https://player.vimeo.com/video/{{ id }}?title=0&byline=0&portrait=0" width="300" height="169" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
{% endmacro %}

像这样使用:

{{ vimeoEmbed(120394634) }}

如果我直接在 markdown 文件中定义宏,这将有效。但我当然希望有一个带有宏的全局文件,以便于维护。

我尝试使用 Nunjucks 的{% import "macros.njk" as macros %}. macros.njk将包含vimeoEmbed宏。
但不幸的是,我不断得到Error: template names must be a string: undefined.

作为替代方案,我尝试使用{% include "vimeoEmbed.njk" %}但我得到了相同的Error: template names must be a string: undefined.


这似乎是metalsmith-in-placeNujucks 特有的include,并且importmetalsmith-layouts.

任何其他在 markdown 文件和 Nunjucks 中重用代码的解决方案也是受欢迎的。谢谢!

4

1 回答 1

3

我自己想通了。

我的错误基本上是metalsmith-in-placemetalsmith-markdown插件之后运行。Markdown 插件已经将引号例如转换{{ "some string" }}{{ &quot;some string&quot; }}. 我切换它,以便在 Markdown 之前就地运行。

同时我也更新metalsmith-in-place2.0.0-beta.1. 它现在依赖于 JSTransformer 而不再是 consolidate.js。由于 Nunjucks 转换器似乎在 Nujucks 包含和导入方面存在问题,我还不得不从 Nunjucks 宏切换到过滤器。所以我不完全确定这会解决最初的问题,但很有可能。

于 2016-11-12T03:07:06.070 回答