2016-02-24 7 views
2

Как я могу работать с html-страницами, включая html templates, в Scotty? Но не через Blaze, потому что мне не нравится описывать его структуру в коде haskell. Думаю, мне нужно скрыть, но как именно переплетать его со Скотти?Scotty + Html -> как переплетать их?

ответ

0

Вы можете использовать Heist.renderTemplate превратить шаблон в Blaze.ByteString.Builder.Builder (это не сверкать в HTML, я предполагаю, что все в порядке), а затем установить, что через Web.Scotty.raw. Например:

{-# LANGUAGE OverloadedStrings #-} 
import Heist 
import Heist.Interpreted 

import Web.Scotty (scotty, get, raw, setHeader) 

import Control.Monad.Trans.Either (runEitherT) 
import Control.Monad.IO.Class (liftIO) 
import Blaze.ByteString.Builder (toByteString) 

import qualified Data.ByteString.Lazy as DBL 
import qualified Data.Text.Lazy.Encoding as DT 

import Text.XmlHtml 

main = scotty 3000 $ 
    get "/" $ do 
     -- normally you would probably load your templates from a file, 
     -- but to keep the example small 
     (Right heist) <- liftIO $ runEitherT $ initHeist emptyHeistConfig 
     let heist' = addTemplate "foo" [TextNode "Hello world!"] Nothing heist 

     (Just (builder, mime)) <- renderTemplate heist' "foo" 

     setHeader "Content-Type" (DT.decodeUtf8 $ DBL.fromStrict mime) 
     raw $ DBL.fromStrict $ toByteString builder 
+0

так теоретически я могу использовать Heist точно так же в Snap? – Mario

+0

@Mario У меня нет опыта работы с Snap, но если вы можете передать его ByteString в ответ на запрос, обязательно. – xnyhps