4

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

注意:这个问题故意不显示研究工作。对于我的研究工作,请参阅下面的问答式答案。

4

1 回答 1

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 标记而不是使用纯文本。请参阅莎士比亚文档以获取更多参考。

{-# 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。

于 2014-01-23T16:11:15.183 回答