我想在defaultContext中添加一个字段,它将为所有页面提供一个链接列表。因为我认为我不能改变defaultContext本身,所以我创建了一个函数,它向defaultContext添加了一个listField,并用它替换了对defaultContext的所有引用。虽然程序符合,但我的新listField是空的。
这是我的最新尝试。
-- site.hs
match "index.html" $ do
route idRoute
compile $ do
links <- sortByTitle =<< loadAll "links/*"
let indexCtx =
listField "links" linkCtx (return links) `mappend`
constField "title" "Home" `mappend`
myCtx
getResourceBody
>>= applyAsTemplate indexCtx
>>= loadAndApplyTemplate "templates/default.html" indexCtx
>>= relativizeUrls
match "templates/*" $ compile templateBodyCompiler
myCtx =
listField "navItems" defaultContext (loadAll "nav/*") `mappend`
defaultContext
-- nav/item.markdown
---
title: nav item 1
---
-- templates/default.html
<ul>
$for(navItems)$
$title$
$endfor$
</ul>发布于 2016-09-19 06:58:58
在加载项时,需要使用该项指定编译目标-请参阅加载函数。
load ::(二进制a,可键入a) =>标识符->编译器(项目a) 加载在其他地方编译的项。如果还没有编译所需的项,构建系统将自动处理这个问题。
添加一个简单的(不需要route )编译器应该可以修复它:
match "nav/*" $ compile pandocCompilerhttps://stackoverflow.com/questions/39566674
复制相似问题