0

我正在遵循Hakyll 网站上的官方说明,在我的网站上启动并运行发布预告片。不幸的是,我遇到了障碍,说明并没有太大帮助。

item对于此代码段中引用的值,我收到了超出范围的错误:

loadAndApplyTemplate
     "template/postitem.html"
     (teaserField "teaser" "content" <> defaultContext)
     item

将其嵌入到我的site.hs. 为了重现性,附带说明一下,也不清楚<>操作员来自哪里。这需要导入 Literate Haskell 的模块之一。

完全不清楚这个引用来自哪里,因为它是一个相当常见的词,即使在我的机器上使用和item时,我也必须筛选数千个结果。findgrep

我应该申报或进口什么才能访问item这里?

4

1 回答 1

2

教程页面不是一个完整的示例。 item不是对某些功能的引用。它只是一个占位符名称Item。通常你会从许多其他“编译器”pandocCompiler或其中之一获得它。在这个例子中,就像它的任何其他用途一样。唯一的区别是它将绑定到模板中的预告文本。loadAndApplyTemplate$teaser$

也就是说,这并不是一个很好的示例,因为您通常希望在列出多个帖子的页面上使用预告文本。这可能涉及使用listField来制作您将在模板中迭代的帖子集合。例如,这是我的索引页面的规则:

match "index.html" $ do
    route idRoute
    compile $ do
        posts <- fmap (take indexRecentPostCount) . recentFirst =<< loadAllSnapshots postsPattern "postContent"
        let indexCtx =
                constField "title" "Home" <>
                baseCtx

        getResourceBody
            >>= applyAsTemplate (listField "posts" (teaserField "teaser" "postContent" <> postCtx) (return posts) <> indexCtx)
            >>= loadAndApplyDefaultTemplate indexCtx
            >>= relativizeUrls

在这种情况下,“项目”是getResourceBody返回的,即index.html. 这绑定$posts$到帖子列表。忽略元数据,我index.html的只是:

$for(posts)$
    $partial("templates/teaser.html")$
$endfor$

$teaser$然后绑定在template/teaser.html模板中。

于 2017-01-23T09:06:55.767 回答