'where'没有找到要在CSV数据中查找的参数的条目

时间:2017-07-13 23:10:39

标签: jekyll liquid

jekyll 2.4.0,Mac 10.12.5

#!/usr/bin/env stack
-- stack --resolver lts-8.17 --install-ghc runghc --package turtle --package lens
{-# LANGUAGE OverloadedStrings #-}
import Turtle
import Control.Lens
import Control.Foldl as Foldl
import Filesystem.Path.CurrentOS
import Data.Text.IO as T
import Data.Text as T

main = do
  homedir <- home
  let paths = lstree $ homedir </> "projects"
  let t = fmap (Control.Lens.view _Right . toText) paths
  customView t

customView s = sh (do
  x <- s
  liftIO $ T.putStrLn x)

输入CSV具有此形状,而Year是一个简单的数字:

{% 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,其中每行代表1997年至2016年论文的出版物元数据。有些年份有很多论文,但每年至少有1篇出版物。我想要每年一个标题,以及下面发布的出版物。不幸的是,where过滤器在for循环中找不到给定年份的任何文章。

每个标题下的

当前功能,它会显示所有发布的列表 期望:它应该只显示纸张的出版物。年= = year_of_interest。

提前致谢!

2 个答案:

答案 0 :(得分:1)

这里有三个问题:

您无法在循环中过滤

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

无法按预期工作,因为它始终返回所有数据。

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

会工作,但现在不行......

过滤器过滤器

的位置

不是{% 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 }}返回“1987”,并且双引号表示它是一个字符串,并且您的过滤器,查找整数为“年”值将永远不会找到它。你必须寻找一个字符串。

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

{% 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

答案 1 :(得分:0)

这是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 %}