我希望修改以下代码,而不是生成指向站点上最新三个帖子的链接,而是像传统博客一样,完整地再现帖子的正文。我很难理解下面发生了什么,以及必要的改变是什么。
match "index.html" $ do
route idRoute
compile $ do
let indexCtx = field "posts" $ \_ ->
postList $ fmap (take 3) . recentFirst
getResourceBody
>>= applyAsTemplate indexCtx
>>= loadAndApplyTemplate "templates/default.html" postCtx
>>= relativizeUrls发布于 2013-05-05 13:42:02
这并不完全是微不足道的。第一步是引入snapshots。
正如本教程中所解释的,这可以确保您可以在索引中包含博客帖子,而无需先将模板应用于HTML。所以你会得到类似这样的东西:
match "posts/*" $ do
route $ setExtension "html"
compile $ pandocCompiler
>>= loadAndApplyTemplate "templates/post.html" postCtx
>>= saveSnapshot "content"
>>= loadAndApplyTemplate "templates/default.html" postCtx
>>= relativizeUrls现在,为了在索引页面上显示帖子,您将能够使用帖子的整个$body$。为此,您只需将templates/post-item.html更新为以下内容:
<div>
<a href="$url$"><h2>$title$</h2></a>
$body$
</div>发布于 2013-12-08 06:21:00
我知道这篇文章有点老了,但由于它似乎没有得到解决,这里是我如何处理它的。
首先保存一个快照,如@jaspervdj所述:
match "posts/*" $ do
route $ setExtension "html"
compile $ pandocCompiler
>>= loadAndApplyTemplate "templates/post.html" postCtx
>>= saveSnapshot "content"
>>= loadAndApplyTemplate "templates/default.html" postCtx
>>= relativizeUrls然后,对于index.html,使用loadAllSnapshots加载所有post快照
match "index.html" $ do
route idRoute
compile $ do
posts <- recentFirst =<< loadAllSnapshots "posts/*" "content"
let indexCtx = listField "posts" postCtx (return posts) `mappend`
defaultContext由于快照是在应用default模板之前拍摄的,因此$for(posts)$中的$body$值将只是每个帖子模板的内容,而不会应用默认模板。
https://stackoverflow.com/questions/15860444
复制相似问题