11

YesodなしでHamletを使用する方法の例を誰かに教えてもらえますか? http://www.yesodweb.com/book/templatesはすばらしいドキュメントですが、ghciセッションで、クラッシュせずに単純なhamletテンプレートをレンダリングすることはできません。

4

2 に答える 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 に答える