我在我的markdown文件中重用模板代码时遇到了麻烦.
例如,我想拉入
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”作为宏%}. macros.njk将包含vimeoEmbed宏.
但不幸的是我不断收到错误:模板名称必须是一个字符串:undefined.
作为替代方案,我尝试使用{%include“vimeoEmbed.njk”%},但我得到相同的错误:模板名称必须是字符串:undefined.
由于Nujucks的包括和导入工作与metalmith-layouts一样好,这似乎特别适用于metalmith-in-place.
任何其他重复使用markdown文件和Nunjucks中的代码的解决方案也是受欢迎的.谢谢!
最佳答案 我自己想通了.
我的错误基本上是在metalmith-markdown插件之后运行metalmith-in-place. Markdown插件已经将引号转换为{{“some string”}}到{{& quot; some string& quot; }}.
我把它切换到原地,然后在Markdown之前运行.
与此同时,我还将metalsmith-in-in更新为2.0.0-beta.1.它现在依赖于JSTransformer,而不再是mergeate.js.
由于Nunjucks变压器似乎有一个issue与Nujucks包括和进口我也不得不从Nunjucks宏切换到过滤器.
所以我不完全确定这会解决最初的问题,但很可能.