谁能指出我如何在没有 Yesod 的情况下使用 Hamlet 的示例? http://www.yesodweb.com/book/templates是一个很棒的文档,但我无法让我的 ghci 会话渲染一个简单的小村庄模板而不会崩溃。
问问题
2201 次
2 回答
16
这是一个显示大部分基本内容的示例,包括呈现键入的 URL。
{-# LANGUAGE TemplateHaskell, QuasiQuotes #-}
import Data.Text
import Text.Blaze.Html.Renderer.String (renderHtml)
import Text.Hamlet hiding (renderHtml)
data Url = Haskell | Yesod
renderUrl Haskell _ = pack "http://haskell.org"
renderUrl Yesod _ = pack "http://www.yesodweb.com"
title = pack "This is in scope of the template below"
template :: HtmlUrl Url
template = [hamlet|
<html>
<head>
#{title}
<body>
<p>
<a href=@{Haskell}>Haskell
<a href=@{Yesod}>Yesod
|]
main = do
let html = template renderUrl
putStrLn $ renderHtml html
输出:
<html><head>This is in scope of the template below</head>
<body><p><a href="http://haskell.org">Haskell</a>
<a href="http://www.yesodweb.com">Yesod</a>
</p>
</body>
</html>
于 2011-07-15T21:31:20.333 回答
3
好吧,手动渲染 URL 并以最愚蠢的方式做事,我们可以使用这个:
hamVal = [$hamlet|
<html>
<head>
<title>Test page
<body>Testing
|]
test :: ByteString
test = renderHamlet (\_ _ -> "") hamVal
哪个按预期工作。我想你想做一些更有用的事情,但这里的简单例子工作正常,所以如果不知道你在哪里遇到麻烦,很难说更多。
于 2011-07-15T21:11:20.067 回答