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-border
或 post.no-border
,returns 一个空字符串,计算结果为真,因为 liquid 中的所有值都是真实的,除了 false
和 nil
。试试这个(或类似的东西):
{% 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 中,除了 nil
和 false
之外的一切都是真实的。 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
,您将得到相同的结果。
我正在尝试根据我的 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-border
或 post.no-border
,returns 一个空字符串,计算结果为真,因为 liquid 中的所有值都是真实的,除了 false
和 nil
。试试这个(或类似的东西):
{% 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 中,除了 nil
和 false
之外的一切都是真实的。 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
,您将得到相同的结果。