假设我有以下shakespeare
模板代码:
$doctype 5
<html>
<body>
<h2>This is a test
<div>Value of test variable: #{testVariable}
文件mytemplate.hamlet
中的。
如何在不明确粘贴源代码中的模板的情况下使用shamletFile
呈现它?
注意:这个问题立即以Q&amp; A风格的方式回答,因此故意不会显示任何研究工作。
答案 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>
请注意,在您的应用中,您可能需要使用shamletFile
,xshamletFile
,hamletFile
或ihamletFile
。有关何时使用其中任何内容的信息,请参阅the Hackage documentation和the Yesod book on Shakespearean templates。