假设我有以下shakespeare
模板代码:
$doctype 5
<html>
<body>
<h2>This is a test
<div>Value of test variable: #{testVariable}
在文件中mytemplate.hamlet
。
如何在shamletFile
不将模板显式粘贴到源代码中的情况下使用它来渲染它?
注意:这个问题是立即以问答方式回答的,因此故意不显示任何研究工作。
假设我有以下shakespeare
模板代码:
$doctype 5
<html>
<body>
<h2>This is a test
<div>Value of test variable: #{testVariable}
在文件中mytemplate.hamlet
。
如何在shamletFile
不将模板显式粘贴到源代码中的情况下使用它来渲染它?
注意:这个问题是立即以问答方式回答的,因此故意不显示任何研究工作。
有关如何将模板呈现为静态文件的信息,请参阅上一个问题。hamlet
唯一的主要区别是您需要使用 Template Haskell 的运算符$(...)
来评估. 这是一个完整的示例,假设您与 Haskell 文件位于同一目录中:Q Exp
shamletFile
mytemplate.hamlet
{-# 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
、或。有关何时使用这些模板的信息,请参阅Hackage 文档和有关莎士比亚模板的 Yesod 书。xshamletFile
hamletFile
ihamletFile