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。
提前致谢!
答案 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
%}}
近乎工作......
{{ 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.Year
是site.data.publications
的对象我相信您只需指定"Year"
顺便提一下这是区分大小写的。
{% for paper in site.data.publications | where, "Year", year_of_interest %}