在Liquid中使用'或'作为可选模板变量

时间:2013-07-31 16:37:37

标签: templates jekyll liquid

我有一个小型的Jekyll供电网站,它使用默认的Liquid模板引擎。我正在将其转换为使用Gekyll,它会使用Git时间戳覆盖标准page.date模板变量,因此我需要覆盖前面事项中声明的page.original_date值的日期对于较旧的帖子。

在我的模板中,我希望能够这样做:

<span class="date">{% page.original_date or page.date | date: "%B %-d, %Y" }}</span>

这似乎不起作用,所以我这样做:

<span class="date">
{% if page.original_date %}
    {{ page.original_date | date: "%B %-d, %Y" }}
{% else %}
    {{ page.date | date: "%B %-d, %Y" }}
{% endif %}
</span>

这不是什么大问题,但是很麻烦,无法寻找更好的解决方案。 Liquid中的逻辑是否允许像我第一次尝试那样的回退变量?

2 个答案:

答案 0 :(得分:3)

在寻找三元运算符方面,我认为这是您可以使用的最简单的语法:

{% assign original_date = page.original_date %}
{% unless original_date %}{% assign original_date = page.date %}{% endunless %}
{% unless original_date %}{% assign original_date = date: "%B %-d, %Y" %}{% endunless %}

不太可读或简洁,但至少它有效!

答案 1 :(得分:2)

首先,

{% page.original_date or page.date | date: "%B %-d, %Y" }}逻辑对我来说不正确。

Liquid中肯定支持

or运算符,但它是一个条件OR运算符,与其他普通编程语言一样执行逻辑或运算。

但是,你想要的是一个后备的东西,比如三元运算符。

例如,与C#的?? Operator?: Operator

类似
{% page.original_date ?? page.date | date: "%B %-d, %Y" }}
{% page.original_date ? page.original_date : page.date | date: "%B %-d, %Y" }}

不幸的是,我不认为它存在于Liquid中。请在Liquid的问题跟踪器中查看此Ternary operator support isssue