Может ли кто-нибудь указать мне пример того, как использовать Гамлета без Йесод? http://www.yesodweb.com/book/templates — отличная документация, но я не могу получить мой сеанс ghci для рендеринга даже простого шаблона деревушки без сбоев.
Использование Hamlet в Haskell без Yesod
comment
Было бы полезно, если бы вы показали, что вы делаете в GHCi, и как он падает.
- person C. A. McCann   schedule 16.07.2011
Ответы (2)
Вот пример, показывающий большинство основных вещей, включая рендеринг введенных 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>
person
hammar
schedule
15.07.2011
Попытка сделать это как есть приводит к ошибке компиляции ghc: pastie.org/2220259, если я изменю @{} на #{} я получаю: pastie.org/2220261
- person singpolyma; 16.07.2011
Здесь он отлично работает, запуская его с
runghc
, используя ghc 7.0.2
и hamlet 0.8.2
. Как ты это делаешь? Первая ошибка выглядит очень странно. Как языковые прагмы оказались в HTML? Второй выглядит так, как будто вам просто нужно удалить некоторые из pack
вызовов.
- person hammar; 16.07.2011
который пытался запустить ghc --make, пытаясь запустить ghc, я получаю pastie.org/2220468 ghc 7.0.3 hamlet 0.6.1.2 -- о, моя версия немного старше вашей. возможно, синтаксис был изменен :(
- person singpolyma; 16.07.2011
А, я обнаружил это. По-видимому, hamlet был больше похож на haml, и моя версия имеет старый синтаксис.
- person singpolyma; 16.07.2011
Что ж, вручную махая рендерингом URL и делая вещи самым глупым способом, который работает, мы можем использовать это:
hamVal = [$hamlet|
<html>
<head>
<title>Test page
<body>Testing
|]
test :: ByteString
test = renderHamlet (\_ _ -> "") hamVal
Что работает, как ожидалось. Я предполагаю, что вы хотите сделать что-то немного более полезное, но тривиальный пример здесь работает нормально, поэтому трудно сказать больше, не зная, где у вас возникли проблемы.
person
C. A. McCann
schedule
15.07.2011
Итак, я получил это для компиляции, но, как ни странно, он выводит ‹html›‹head›‹title›Test page‹body›Testing вместо ожидаемого convert-to-proper-html
- person singpolyma; 16.07.2011
А, я обнаружил это. По-видимому, hamlet был больше похож на haml, и моя версия имеет старый синтаксис.
- person singpolyma; 16.07.2011