Jekyll调试:打印所有变量

48

我想瞥一眼Jekyll的内部运作,看看发生了什么。在php中,你可以使用get_defined_vars,所以我尝试使用类似的方式:

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

输出什么都没有。我是不是在尝试过多?Ruby或Jekyll中有没有这样的方法?我只想四处探索,确保一切设置正确,并可能了解我不知道的变量。

5个回答

54

使用Jekyll 2.x,您可以使用此插件

它使您可以执行类似于{{ site | debug }}的操作。

自Jekyll 3以来,您有{{ variable | inspect }}


41

inspect 无法查看变量内容,而 jsonify 可以做到。

{{ variable | jsonify }}

不需要任何插件。

请注意,jsonify将使用尽可能多的内存来完成其工作,而没有任何特定的限制。比如,如果你有数百篇帖子或页面,并且你想一次性地对它们进行json序列化,这可能不会按照你的预期工作。最坏的情况是系统可能会耗尽内存并变得无响应。请谨慎行事。


11
其他答案没有回答问题中的“所有变量”部分。
虽然Jekyll没有提供类似于`get_defined_vars`的功能,但文档确实声明了所有可用的全局变量(目前为止这些变量是sitepagelayoutcontentpaginator)。
因此,您可以通过一系列使用jsonify 过滤器的调用(还要使用escape进行过滤,因为其中一些变量将包含HTML),来调试/打印所有变量。
<pre>
    site: {{ site | jsonify | escape }}
    page: {{ page | jsonify | escape }}
    layout: {{ layout | jsonify | escape }}
    content: {{ content | jsonify | escape }}
    paginator: {{ paginator | jsonify | escape }}
</pre>

5

为了对变量进行美观打印,您可以将以下内容插入到任何模板中:

<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 | jsonify | uri_escape }} 中的 site 改为您要打印的任何变量。

然后,您就可以在生成的页面中看到整齐排列的变量。就像这样:

Pretty-printed Jekyll template variables


0

给未来看到这个页面的人。

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

gem install 'jekyll-liquid-debug'

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

通过使用,

jekyll-liquid-debug -f YOUR_LIQUID_FILE.liquid

它还有其他用途,请多加了解~


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接