jekyll 调试或打印所有变量

jekyll debug or print all variables

我想进入 Jekyll 的大脑,看看发生了什么,在 php 中你有 get_defined_vars,所以我尝试做一些类似的事情:

      {% for local_variable in local_variables %}
      <p> {{ local_variable }} </p><br>
      {% endfor %}

什么都不输出。我是不是太努力了? ruby 或 jekyll 中是否有一些方法可以做到这一点?我只是想四处看看,确保一切设置正确,并可能找出我不知道的变量。

使用 Jekyll 2.x,您可以使用 this plugin

它允许您执行类似 {{ site | debug }} 的操作。

从 Jekyll 3 开始,您有 {{ variable | inspect }}.

inspect 不允许您查看变量内部,而 jsonify 就是这样做的。

{{ variable | jsonify }}

不需要插件。

请注意,jsonify 将使用它完成任务所需的内存,没有任何特定限制。比方说,如果您有数百篇文章或页面,并且您希望一次将它们全部 jsonify,这可能不会像您预期的那样工作。最坏的情况是系统可能会耗尽 RAM 并变得无响应。谨慎行事。

其他答案没有解决问题的“所有变量”部分。

尽管 Jekyll 没有提供 get_defined_vars 等价物,the documentation does declare all available global variables(目前是 sitepagelayoutcontent, 和 paginator).

因此,您可以 debug/print 所有 变量与一系列 jsonify filter 调用(也使用 escape 进行过滤,因为其中一些将包含 HTML):

<pre>
    site: {{ site | jsonify | escape }}
    page: {{ page | jsonify | escape }}
    layout: {{ layout | jsonify | escape }}
    content: {{ content | jsonify | escape }}
    paginator: {{ paginator | jsonify | escape }}
</pre>

要漂亮地打印变量,您可以将其插入任何模板:

<pre id="jekyll-debug"></pre>
<script>
  var obj = JSON.parse(decodeURIComponent("{{ site | jsonify | uri_escape }}"));
  var prettyJson = JSON.stringify(obj, null, 4);  // Pretty-printed JSON (indented 4 spaces).
  document.getElementById("jekyll-debug").textContent = prettyJson;
</script>

site(在 {{ site | jsonify | uri_escape }} 中)更改为您要打印的任何变量。

然后您将能够在生成的页面中看到整齐排列的变量。像这样:

为了将来看到此页面的人。

我写了一个包来完成这类工作。在你的命令行中,安装它,

gem install 'jekyll-liquid-debug'

然后您可以在您的终端中调试您的liquid文件,而无需一次又一次地构建您的整个站点

通过使用,

jekyll-liquid-debug -f YOUR_LIQUID_FILE.liquid

它还有其他用法,请多多查看~