根据液体过滤器的值评估液体“if”声明

时间:2013-03-25 17:29:36

标签: jekyll liquid

我有一个我在Jekyll网站上使用的自定义液体过滤器,

{{ page.url | git_modified }}

从git log(plugin code here)生成修改日期。

通常我可以添加额外的过滤器,将其转换为字符串或XML模式,具体取决于上下文,例如: {{ page.url | git_modified | date_to_string }}。除非由于某种原因我的git_modified过滤器无法为某些帖子返回时间对象,否则一切都很糟糕。在那种情况下,我试图写一个体面的失败条件,但不能完全解决这个问题。

我想将我的调用包装在一个流畅的if语句中,以检查变量是否首先被定义:

{% if defined?( {{ page.url | git_modified }} %}

但我似乎无法在Liquid块选项({{{%)中使用Liquid标签(%})。我以为我可以使用Liquid capture来解决这个问题:

{% capture page_modified %}{{ page.url | git_modified }}{% endcapture %} 
{% if defined?(page_modified) %} 
{{ page.url | git_modified | date_to_string }}
{% endif %}

但所说的变量似乎不适用于if语句。有什么建议?

1 个答案:

答案 0 :(得分:4)

尝试这样做:

{% capture page_modified %}
    {{ page.url }}
{% endcapture %}

{% if page_modified %} 
    {{ page.url }}
{% endif %}

如果未定义page_modified,则其值仍为nil,因此只需使用if构造,就像在纯Ruby中一样。我在这里测试了jekyll 1.0.0.beta2 - jekyll new test,然后使用上面的代码创建了一个文件 - 它有效。 :)