如何使用液体“样本”过滤器在 Jekyll 中生成随机帖子?

问题描述

一个 Liquid 过滤器 sample 允许您“从数组中选择一个随机值。可选地,选择多个值”。 (请参阅文档 here

我的用例是有一个照片日记,供查看者点击并从我现有的收藏“照片日记”中生成一个随机帖子,下次点击时不再重复该帖子。

这是我的代码

{% assign posts = site.photodiary | where_exp:"post","post.url != page.url" | sample: 8 %}
        {% for post in posts limit:1 %}
        <a class="prev" href="{{post.url}}">Load a post</a>
    {% endfor %}

</div>
  <main>
    {%- if page.content-type == "photodiary" -%}
      <h2>{{page.title}}</h2>
      <p>  {{content}} </p>
        {%- endif -%}

  </main>

目前我只有 8 个条目,因此 sample: 8

虽然代码有效,但点击 1-2 次后,帖子将重复,我的页面只会加载相同的 2 到 3 个帖子。

谁能告诉我逻辑或我的代码是否存在缺陷? 非常感谢!

解决方法

Jekyll 是一个静态站点生成器。这意味着 Jekyll 生成站点一次,因此过滤器仅在构建站点时应用。 sample 过滤器会随机选择一个或多个帖子并将其插入您的页面,但在重新加载页面时不会改变,因为该网站已经生成。

Jekyll 无法实现您想要的那种动态行为,因此您必须以其他方式实现。看看Generating a random link through Javascript/HTML