将文件名作为变量传入Jekyll include标签失效问题求助
解决Liquid动态Include文件的语法错误问题
这个问题我之前在Jekyll项目里也踩过坑——Liquid的include标签语法有严格限制,不能直接在标签内部用{{ }}插值变量,这就是触发错误的核心原因。当你写{% include {{ page.baaz }} %}时,Liquid会把{{ page.baaz }}当成文件名的一部分(包含了大括号这类无效字符),自然就抛出了“无效语法”的报错。
下面给你两种可行的解决方案:
方案1:通过assign定义变量后引用(通用所有Liquid版本)
这是最稳妥的通用方法,先把page.baaz的值赋值给一个普通变量,再直接在include标签里使用这个变量名(不用加双大括号):
{% assign target_include = page.baaz %} {% capture foo %}{% include target_include %}{% endcapture %}
Liquid会自动识别target_include是变量,解析它的取值作为要引入的文件名,完美适配你的场景。
方案2:直接引用变量(Jekyll 3.5+版本支持)
如果你使用的是Jekyll 3.5或更高版本,甚至可以省略assign步骤,直接在include标签里写变量名(注意不要加{{ }}):
{% capture foo %}{% include page.baaz %}{% endcapture %}
这个版本的Liquid已经支持在include标签里直接引用上下文变量,只要你的page.baaz是合法的文件名(比如你设置的test.html),就能正常运行。
额外注意事项
- 确保
page.baaz指定的文件(比如test.html)确实存在于Jekyll默认的_includes目录下;如果是自定义子目录,需要在文件名前加上相对路径(比如subdir/test.html)。 - 如果
page.baaz可能为空值,建议加个判断避免报错:{% if page.baaz %} {% assign target_include = page.baaz %} {% capture foo %}{% include target_include %}{% endcapture %} {% endif %}
内容的提问来源于stack exchange,提问作者Tyler Hayes
相关产品推荐
相关产品推荐

