从文件渲染哈姆雷特模板

时间:2014-02-06 16:58:55

标签: haskell hamlet

假设我有以下shakespeare模板代码:

$doctype 5
<html>
    <body>
        <h2>This is a test
        <div>Value of test variable: #{testVariable}
文件mytemplate.hamlet中的

如何在不明确粘贴源代码中的模板的情况下使用shamletFile呈现它?

注意:这个问题立即以Q&amp; A风格的方式回答,因此故意不会显示任何研究工作。

1 个答案:

答案 0 :(得分:1)

有关将hamlet模板呈现为静态文件的原因的信息,请参阅this previous question

唯一的主要区别是您需要使用Template Haskell的$(...)运算符来评估Q Exp产生的shamletFile。这是一个完整的示例,假设您的mytemplate.hamlet与Haskell文件位于同一目录中:

{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
import Text.Blaze.Html.Renderer.String (renderHtml)
import Text.Blaze.Html
import Text.Hamlet

-- | The main template
renderTemplate :: String -> String
renderTemplate testVariable = renderHtml ( $(shamletFile "mypage.hamlet") )

main = do
    putStrLn $ renderTemplate "foobar"

执行时,会打印:

<!DOCTYPE html>
<html><body><h2>This is a test</h2>
<div>Value of test variable: foobar</div>
</body>
</html>

请注意,在您的应用中,您可能需要使用shamletFilexshamletFilehamletFileihamletFile。有关何时使用其中任何内容的信息,请参阅the Hackage documentationthe Yesod book on Shakespearean templates