You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将文件名作为变量传入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:16:13