在 Jekyll 中有条件地添加数据属性

Conditionally add data-attributes in Jekyll

我的博客文章的基本 YAML Front Matter 如下所示:

   layout: post
   title:  'Crepes'
   permalink: /crepes/
   src: '/assets/images/crepes.jpg' 
   date:   2018-05-24 21:41:00
   origin: http//...
   ingredients: 
    - ingredient1: amount
    - ingredient2: amount 

这是我要显示的 index.html 条目:

<ul>
{% for post in site.posts %}

<li data-title='{{ post.title }}' data-origin="{{ post.origin }}"
    data-src="{{ post.src | prepend: relative_url}}" 
    data-content='{ "ingredients": {{ post.ingredients | jsonify }} }'>

    <a href="{{ site.baseurl }}{{ post.url }}">
        <img src="{{ post.src | prepend: relative_url }}" alt={{ post.title }}/>
    </a>

</li>
{% endfor %}
</ul>

问题是: 有些帖子应该没有原始值,例如 origin:。我正在寻找一种方法来添加 data-origin 属性,前提是它是在 YAML Front Matter 中指定的值。

液体给出以下选项:

{% if condition %}
    <li>....</li>
{% endif %}

有什么方法可以在 html 标签中使用它吗?就我而言,我希望是这样的:

 {% for post in site.posts %}

 <li  
     {% if post.origin has value %}
         data-origin="{{ post.origin }}"
     {% endif %}">      
</li>
{% endfor %}

这里我看到四种情况:

  • post.origin 不在前面: post.origin == null
  • post.origin 出现在前面,但未设置 (post.origin:) => post.origin == null`
  • post.origin 出现在前面,但设置为空字符串 (post.origin: "") => post.origin == ""
  • post.origin 出现在前面,并设置为有效字符串 (post.origin: "toto") => post.origin == "toto"

结果符合Truthy and falsy Liquid documentation.

从那里,使用 logical liquid operators,我们可以建立一个条件,如:

<li
  {% if post.origin and post.origin != "" %}
     data-origin="{{ post.origin }}"{% endif %}>
</li>

注意post.origin表示post.origin != null