【问题标题】:Using filters in Liquid tags在 Liquid 标签中使用过滤器
【发布时间】:2011-08-23 17:57:30
【问题描述】:

我正在使用 jekyll 和 Liquid 在 github 页面上生成一个静态网站。

我想根据文档中的内容数量是否达到特定的作品数量来做出一些内容决策。 jekyll 有一个液体过滤器,它计算我想在 if 标记中使用的单词数。我试过这个:

{% if page.content | number_of_words > 200 %} 
    ...
{% endif %} 

但它似乎不起作用。我还尝试将结果分配给一个变量并使用它,并从过滤器中捕获输出。但到目前为止,我还没有运气。

有没有人设法在液体标签中使用过滤器?

【问题讨论】:

    标签: filter tags liquid jekyll


    【解决方案1】:
    {% assign val = page.content | number_of_words %}
    {% if val > 200 %}
     ....
    {% endif %}
    

    【讨论】:

    • 我不确定你为什么被否决。这个解决方案对我有用。谢谢!
    • 这应该是答案!
    • 我同意@HeShiming。这应该是答案。
    • 似乎是唯一干净的方法。真的没有文档解释比较不能与过滤器结合使用吗?
    • 仍然是(2017 年 11 月)准确的答案。上述解决方法有效。仍然没有像...{% if (url | truncate: 6, '') == '/blog/' %}这样的东西(导致总是true,并不总是false顺便说一句。这样你就不会太早欢呼:-))
    【解决方案2】:

    编辑:这不再是最新的解决方案,请参阅并支持Martin Wang's assign-based solution

    {% assign val = page.content | number_of_words %}
    {% if val > 200 %}
     ....
    {% endif %}
    >```
    

    在最初编写此答案时(2011 年)assign 不是一个可行的解决方案,因为它不适用于过滤器。该功能在一年后推出,in 2012

    如果有人需要在旧版本的 Liquid 中处理此问题,请在下面留下我 2011 年的原始答案。


    我认为不可能以这种方式在标签内使用过滤器;这似乎是不可能的。

    不过,我已经设法构建了一组条件,可以解决您的特定问题(判断页面是长于还是短于 200 字)。就是这样:

    {% capture truncated_content %}{{ page.content | truncatewords: 200, '' }}{% endcapture %}
    
    {% if page.content != truncated_content %}
      More than 200 words
    {% else %}
      Less or equal to 200 words
    {% endif %}
    

    为了使计算更加精确,使用strip_html 运算符可能是明智之举。这给了我们:

    {% capture text %}{{ page.content | strip_html }}{% endcapture %}
    {% capture truncated_text %}{{ text | truncatewords: 200, '' }}{% endcapture %}
    
    {% if text != truncated_text %}
      More than 200 words
    {% else %}
      Less or equal to 200 words
    {% endif %}
    

    问候!

    【讨论】:

    • 谢谢。这是迄今为止最好的答案。
    • 非常适合没有插件的 github 托管!
    【解决方案3】:

    刚刚找到https://github.com/mojombo/jekyll/wiki/Plugins,它详细介绍了如何为 Github 编写自定义标签。这看起来像是一个可能的方向,并提供对其他开发人员的许多其他定制的访问。

    【讨论】:

    • 我认为这些不适用于 Github。不过它们可以在其他地方使用。
    • 是的,所以我才发现 :-( 在花了几个小时学习基本的 Ruby 并编写了我需要的东西之后。叹息。
    【解决方案4】:
    {% capture number_of_words_in_page %}{{page.content | number_of_words}}{% endcapture %}
    {% if number_of_words_in_page > 200 %} 
        ...
    {% endif %} 
    

    试试这个。

    【讨论】:

    • 不 :-) 在发布之前已经尝试过了。问题是捕获产生一个字符串变量,然后在 if 标记中无法正常工作。
    • 糟糕!我曾经遇到过完全相同的问题,我最终使用了这个。但现在我记得对照一个字符串检查它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多