Jekyll liquid if 语句混淆

Jekyll liquid if statement confusion

我正在尝试根据我的 markdown post 的 liquid header 使 if 语句工作,其中如果变量设置为 true,则执行操作,否则,如果它不存在,则执行另一件事。只是似乎无法让它正常工作。

我试过将 if 语句更改为 {% unless %}。尝试 != false 的不同组合并交换图像代码。

{% capture banner %}{{ page.banner }}{{ post.banner }}{% endcapture %}
{% capture no-border %}{{ page.no-border }}{{ post.no-border }}{% endcapture %}
{% capture title %}{{ page.title }}{{ post.title }}{% endcapture %}

{% if banner != "" %}
    {% if no-border == true %}
    <img class="center no-border" src="{{ banner }}" alt="{{ title }}"/><br/>
    {% else %}
    <img class="center" src="{{ banner }}" alt="{{ title }}"/><br/>
    {% endif %}
{% endif %}

我预计会看到:如果 no-border 在 markdown 文件液体部分中设置为 true,则删除横幅图像的边框。

你的捕获标签,没有 page.no-borderpost.no-border,returns 一个空字符串,计算结果为真,因为 liquid 中的所有值都是真实的,除了 falsenil。试试这个(或类似的东西):

{% capture banner %}{{ page.banner }}{{ post.banner }}{% endcapture %}
{% capture title %}{{ page.title }}{{ post.title }}{% endcapture %}

{% if page.banner or post.banner %}
    {% if page.no-border or post.no-border %}
        <img class="center no-border" src="{{ banner }}" alt="{{ title }}"/><br/>
    {% else %}
        <img class="center" src="{{ banner }}" alt="{{ title }}"/><br/>
    {% endif %}
{% endif %}

这一切都未经测试,您可以通过几种不同的方式完成它。

编辑:澄清

详细说明:

capture 是一个函数。它评估内部的任何内容,并将其作为字符串存储在变量中。如果内容是 nil(无),那么它 returns 是一个空字符串 ("")。

在编程中,每个值都被视为 'truthy' 或 'falsy'。这意味着(除其他事项外)当放置在 if 语句中时,真值将执行该语句,而假值则不会。以整数值1为例;在大多数语言中,这是一个真值,所以

if 1
  puts 'hello world'
end

将打印 'hello world' 到控制台。 nil 通常是一个假值,所以

if nil
  puts 'hello world'
end

什么都不做。

究竟哪些值是真值或假值取决于编程语言。 在 Liquid 中,除了 nilfalse 之外的一切都是真实的。 capture 总是 returns 一个字符串,所有字符串,即使是空字符串,都是真实的。

如果你这样写:

{% if "" %}
<img class="center no-border" src="{{ banner }}" alt="{{ title }}"/><br/>
{% else %}
<img class="center" src="{{ banner }}" alt="{{ title }}"/><br/>
{% endif %}

您将始终获得无边框版本。将 if 语句替换为 if "true"if true,您将得到相同的结果。