使用hamlet呈现静态HTML

时间:2014-01-23 16:11:15

标签: haskell hamlet static-html

如何使用hamlet框架从Haskell内部生成静态HTML页面?

注意:此问题故意不显示研究工作。对于我的研究工作,请参阅下面的Q& A风格的答案。

1 个答案:

答案 0 :(得分:7)

hamlet会产生被评估为blaze个表达式的QuasiQuoters。使用Text.Blaze.Html.Renderer.String.renderHtml,您可以将它们渲染为字符串。

让我们从一个简单的非HTML示例开始:

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

greet name = [shamlet|Hello world #{name}|]
-- This prints "Hello world John Foo"
main = putStrLn $ renderHtml $ greet "John Foo"

为了提高效率,您还可以使用Text代替String Text.Blaze.Html.Renderer.Text.renderHtml

将此文件写入文件与标准Haskell方法没有区别。例如,您可以使用writeFile代替putStrLn来执行此操作。您只需要修改最后一行

main = do writeFile "greet.txt" $ renderHtml $ greet "John Foo"

现在我们只需要添加HTML标记而不是使用纯文本。有关详细信息,请参阅the Shakespeare documentation

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

greet name = [shamlet|
                $doctype 5
                <html>
                    <head>
                        <title>Greeting for #{name}
                    <body>
                        <h2>
                            Hello world #{name}|]

main = writeFile "greet.html" $ renderHtml $ greet "John Foo"

greet.html现在包含静态呈现的问候语HTML。