尝试定义"链接"我的索引页面上的字段,即使我创建了[ERROR] Missing field $links$ in context for item index.html
字段,我也遇到了错误:links
。 (至少我很确定我有...)
-- site.hs
main = hakyll $ do
match "index.html" $ do
route idRoute
compile $ do
links <- loadAll "links/*"
let indexCtx =
listField "links" linkCtx (return links) `mappend`
constField "title" "Home" `mappend`
defaultContext
getResourceBody
>>= applyAsTemplate indexCtx
>>= loadAndApplyTemplate "templates/default.html" indexCtx
>>= relativizeUrls
match "templates/*" $ compile templateBodyCompiler
linkCtx :: Context String
linkCtx =
field "link" $ \item -> return (itemBody item)
defaultContext
-- index.html
<h2>Links</h2>
$partial("templates/link-list.html")$
-- templates/link-list.html
<ul>
$for(links)$
$link$
$endfor$
</ul>
-- links/behance.markdown
---
title: Behance
---
[Behance](https://www.behance.net/laylow)
答案 0 :(得分:1)
在尝试代码时,我没有遇到这样的错误。相反,我从linkCtx得到一个类型错误。它可以这样纠正:
linkCtx =
field "link" (\item -> return (itemBody item)) `mappend`
defaultContext
或更具惯用性,用point-free form替换lambda。
linkCtx =
field "link" (return . itemBody) `mappend`
defaultContext
此外,如果你想加载一些项目,你应该先匹配它们,以便hakyll知道它们的存在。
match "links/*" $ compile pandocCompiler
进行上面列出的更改后,使用:stack build
重建site.hs,链接列表将在index.html中呈现