Визуализация шаблона деревушки из файла

Предполагая, что у меня есть следующее shakespeare код шаблона:

$doctype 5
<html>
    <body>
        <h2>This is a test
        <div>Value of test variable: #{testVariable}

в файле mytemplate.hamlet,

Как я могу сделать это используя shamletFile без явного вставления шаблона в исходный код?

Примечание. На этот вопрос был дан немедленный ответ в стиле Q&A, и поэтому он намеренно не требует каких-либо исследований.

1 ответ

Решение

См. Этот предыдущий вопрос для получения информации о том, как, почему, чтобы сделать hamlet шаблоны как статические файлы.

Единственное существенное отличие состоит в том, что вам нужно использовать шаблон Haskell's $(...) оператор для оценки Q Exp что дает shamletFile, Вот полный пример, который предполагает ваш mytemplate.hamlet находится в том же каталоге, что и ваш файл на Haskell:

{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
import Text.Blaze.Html.Renderer.String (renderHtml)
import Text.Blaze.Html
import Text.Hamlet

-- | The main template
renderTemplate :: String -> String
renderTemplate testVariable = renderHtml ( $(shamletFile "mypage.hamlet") )

main = do
    putStrLn $ renderTemplate "foobar"

При выполнении он печатает:

<!DOCTYPE html>
<html><body><h2>This is a test</h2>
<div>Value of test variable: foobar</div>
</body>
</html>

Обратите внимание, что в вашем приложении вам может понадобиться shamletFile, xshamletFile, hamletFile или же ihamletFile, См. Документацию Hackage и книгу Yesod по шаблонам Шекспира для получения информации о том, когда использовать любой из них.

Другие вопросы по тегам