2

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

$doctype 5
<html>
    <body>
        <h2>This is a test
        <div>Value of test variable: #{testVariable}

在文件中mytemplate.hamlet

如何在shamletFile不将模板显式粘贴到源代码中的情况下使用它来渲染它?

注意:这个问题是立即以问答方式回答的,因此故意不显示任何研究工作。

4

1 回答 1

1

有关如何将模板呈现为静态文件的信息,请参阅上一个问题。hamlet

唯一的主要区别是您需要使用 Template Haskell 的运算符$(...)来评估. 这是一个完整的示例,假设您与 Haskell 文件位于同一目录中:Q ExpshamletFilemytemplate.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 书。xshamletFilehamletFileihamletFile

于 2014-02-06T16:58:54.763 回答