'where' 未找到给定要在 CSV 数据中查找的参数的条目

'where' not finding entries given a parameter to look for in CSV data

杰基尔 2.4.0,Mac10.12.5

{% for year_of_interest in (1997..2017) reversed %}
  <large_year>{{year_of_interest}}</large_year>
    {% for paper in site.data.publications |  where,'site.data.publications.Year',year_of_interest %}
            <div class="publication_card">
              <a class="article_title" href="../../{{paper.Link}}" title="{{paper.Abstract}}">{{paper.Title}}</a>
            </div>
            <div class="paper_author_container">
              <span class="paper_authors">{{paper.Author | upcase}}</span>
              <br>
              <span class="journal_info">{{paper.Year}}—{{paper.Journal | upcase}}</span>
              <button class="btn" data-clipboard-text="{{paper.BibTex}}">
                BIBTEX
              </button>
            </div>
    {% endfor %}
{% endfor %}

输入的 CSV 具有这种形状,年份是一个简单的数字:

Title,Link,Abstract,Author,BibTex,Year,Journal,SupplementalLink

背景:我卡住了!我有一个 CSV,其中每一行代表 1997 年到 2016 年论文的出版物元数据。有些年份有很多论文,但每年至少有一篇出版物。我想要一个 header 每年,并在下面发布出版物。不幸的是,where 过滤器在 for 循环中找不到给定年份的任何文章。

当前功能: 在每个 header 下,它显示所有出版物的列表。
期望: 它应该只显示 paper.Year == year_of_interest.

的出版物

提前致谢!

这是 where 过滤器的唯一文档,因为它不是默认的液体过滤器。

https://gist.github.com/smutnyleszek/9803727

site.data.publication.Yearsite.data.publications的对象我相信你只需要指定"Year"顺便说一下,这是区分大小写的。

{% for paper in site.data.publications | where, "Year", year_of_interest %}

这里有三个问题:

不能循环过滤

{% for paper in site.data.publications | where,'site.data.publications.Year', year_of_interest %}

不会按预期工作,因为它总是 returns 所有数据。

{% assign filtered = site.data.publications | where,'site.data.publications.Year', year_of_interest %}
{% for paper in filtered %}

会用,但现在不行...

Where filter 过滤一个键

不是{% site.data.publications | where,'site.data.publications.Year', year_of_interest %}

但是:{% site.data.publications | where,'Year', year_of_interest%}}

即将开始工作...

CSV 数据是字符串

{{ site.data.publications[0].Year | inspect }} returns "1987" 和双引号表示它是一个字符串,而您的过滤器正在寻找整数 "Year" 值将永远找不到它。您必须改为查找字符串。

要将整数转换为字符串,您可以向其附加一个空字符串。

{% for year_of_interest in (1997..2017) reversed %}

  {% comment %} casting an integer to a string {% endcomment %}
  {% assign yearAsString = year_of_interest | append:"" %}

  {% comment %} filtering datas {% endcomment %}
  {% assign selectedEntries = site.data.publications | where: "Year", yearAsString %}

  {% for paper in selectedEntries %}

现在,它完成了工作。

注释

1 - 使用 | inspect 过滤器进行调试,它有助于确定值的类型(字符串、整数、数组、散列)。

2 - 您还可以通过向其添加零将字符串转换为整数:

{% assign numberAsString = "1997" %}
{{ numberAsString | inspect }} => "1997"
{% assign numberAsInteger = numberAsString | plus: 0 %}
{{ numberAsInteger | inspect }} => 1997