我在Jekyll 3.2.1中使用以下解决方案制作了一个虚拟的“相关帖子”:

    {% for post in site.posts limit: 4 %}
    {% if page.author == post.author and page.title != post.title %}
    <div class="post-stream-item">
    <a href="{{ post.url | prepend: site.baseurl }}" title="{{ post.title  }}"><div class="post-stream-content">
        <img src="{{ post.thumbnail }}" width="80" height="auto" /><span class="post-stream-item-meta"><h3>{{ post.title }}</h3><p>{{ post.author }} on {{ post.date | date: "%b %-d, %Y" }} •     {% assign words = post.content | number_of_words %}
        {% if words <= 160 %}
        1 min
        {% else %}
        {{ words | plus: 159 | divided_by:160 }} mins
        {% endif %} read</p></span></div></a></div>{% if forloop.last == false %}<hr>{% endif %}

        {% endif %}
        {% endfor %}
  • for循环遍历站点中的帖子列表,并给出
    极限
  • 如果当前帖子的作者与该帖子的作者相同
    重复发布,但标题不相同,则填写
    神社的绑定(bind)。

  • 问题出在{% if forloop.last == false %}<hr>{% endif %} 的部分,因为如果在forloop中有更多可迭代的(发布),即使它是显示给用户的最后一个元素,它也会显示 <hr> 标记。

    是否有任何属性可以引用列表中的倒数第二个元素或对此有更好的解决方案?

    最佳答案

    打印一定数量的帖子,没有打印条件

    解决方案:使用循环limit

    {% for post in site.posts limit: 4 %}
        ... output code here
    {% endfor %}
    

    您将精确打印4个帖子,并且forloop.last始终有效。

    在循环中以打印条件打印一定数量的帖子

    解决方案:使用where过滤器,一个counterbreak
    现在,您包括了条件打印:
  • 您不知道将打印哪些帖子以及多少帖子。
  • 如果您不打印最后一个帖子,则列表末尾会有一个HR。

  • 如果您想知道可以打印多少篇文章,可以使用{% assign authorsPosts = site.posts | where: "author", page.author %}authorsPosts.size

    即使可用的帖子数小于您的限制,此代码也可以很好地完成此操作。
    {% comment %} +++++ Max number of posts to print +++++ {% endcomment %}
    {% assign limit = 4 %}
    
    {% comment %} +++++ Select authors posts +++++{% endcomment %}
    {% assign authorsPosts = site.posts | where: "author", page.author %}
    
    {% comment %} +++++ If author's Posts number is less than limit, we change the limit +++++ {% endcomment %}
    {% if limit >= authorsPosts.size %}
      {% comment %} +++++ Number of "listable" posts is author's posts number less 1 (the one actually printed) +++++ {% endcomment %}
      {% assign limit = authorsPosts.size | minus: 1 %}
    {% endif %}
    
    {% assign postsCounter = 0 %}
    {% for post in authorsPosts %}
      {% if page.author == post.author and page.title != post.title %}
    
        {% assign postsCounter = postsCounter | plus: 1 %}
    
        <h3>{{ post.title }}</h3>
    
        {% comment %} +++++ Prints hr only if we are not printing the last post +++++ {% endcomment %}
        {% if postsCounter < limit %}<hr>{% endif %}
    
        {% comment %} +++++ Exit for loop if we reached the limit +++++ {% endcomment %}
        {% if postsCounter == limit %}{% break %}{% endif %}
    
      {% endif %}
    {% endfor %}
    

    关于arrays - Jekyll forloop.last->在最后之前?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39725144/

    10-10 18:45