在Jekyll站点使用mustache.js:能否在Liquid代码块中嵌入Mustache变量?
结论:不能直接这么用哦
首先得明确:Jekyll的Liquid模板和你集成的Mustache.js,两者的渲染顺序和运行上下文是完全分开的,所以你没法在Liquid的代码块(比如{% if %})里直接引用Mustache的变量。
为啥呢?因为Jekyll是在构建/服务器端先处理Liquid代码的,这时候Mustache的{{ mustacheVar }}还只是一段纯文本字符串,Liquid根本不认识它是什么。拿你写的示例来说:
{% if liquidVar == {% raw %}{{ mustacheVar }}{% endraw %} %} // do something {% endif %}
Liquid渲染时,会把{% raw %}{{ mustacheVar }}{% endraw %}当成普通字符串来处理,相当于判断liquidVar是否等于字符串"{{ mustacheVar }}",而不是Mustache变量实际对应的值——这显然不是你想要的效果。
那该怎么解决?分两种情况:
- 如果Mustache的变量数据在Jekyll构建时就能拿到(比如来自站点配置、数据文件),那完全可以把这些数据转换成Liquid可用的变量,直接用Liquid的逻辑处理就行,没必要混用两个模板引擎。
- 如果Mustache的变量是客户端动态加载的(比如前端异步请求的数据),那这种条件判断就得放到客户端用JavaScript来实现:等Mustache完成渲染后,再用JS读取对应的值,执行判断和后续操作。
简单来说,这俩模板引擎一个跑在服务器端,一个通常跑在客户端,上下文不互通,没法直接跨引擎在逻辑块里引用变量~
内容的提问来源于stack exchange,提问作者teknova
相关产品推荐
相关产品推荐

