Uli*_*ler 4 haskell static-html hamlet
如何使用hamlet框架从Haskell内部生成静态HTML页面?
注意:这个问题故意不表示研究工作.对于我的研究工作,请参阅下面的问答式答案.
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"
Run Code Online (Sandbox Code Playgroud)
为了提高效率,您也可以使用Text而不是String Text.Blaze.Html.Renderer.Text.renderHtml
将其写入文件与标准Haskell方法没有什么不同.例如,您可以通过使用writeFile而不是来执行此操作putStrLn.您只需要修改最后一行
main = do writeFile "greet.txt" $ renderHtml $ greet "John Foo"
Run Code Online (Sandbox Code Playgroud)
现在我们只需要添加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"
Run Code Online (Sandbox Code Playgroud)
greet.html 现在包含一个静态呈现的问候语HTML.