Как я могу использовать структуру hamlet
для создания статических HTML-страниц внутри Haskell?
Примечание. В этом вопросе намеренно не показаны исследования. Чтобы узнать о моих исследованиях, см. ответ в стиле вопросов и ответов ниже.
Как я могу использовать структуру hamlet
для создания статических HTML-страниц внутри Haskell?
Примечание. В этом вопросе намеренно не показаны исследования. Чтобы узнать о моих исследованиях, см. ответ в стиле вопросов и ответов ниже.
hamlet
дает QuasiQuoters, которые оцениваются как выражения blaze
. Используя Text.Blaze.Html.Renderer.String.renderHtml
, вы можете визуализировать их к строке.
Начнем с простого примера без HTML:
{-# LANGUAGE QuasiQuotes #-}
import Text.Blaze.Html.Renderer.String (renderHtml)
import Text.Hamlet
greet name = [shamlet|Hello world #{name}|]
-- This prints "Hello world John Foo"
main = putStrLn $ renderHtml $ greet "John Foo"
Для повышения эффективности вы также можете использовать Text
вместо String
Text.Blaze.Html.Renderer.Text.renderHtml
Запись этого в файл ничем не отличается от стандартного подхода Haskell. Это можно сделать, например, используя writeFile
вместо putStrLn
. Вам нужно только изменить последнюю строку
main = do writeFile "greet.txt" $ renderHtml $ greet "John Foo"
Теперь нам нужно только добавить разметку HTML вместо использования обычного текста. Дополнительные сведения см. в документации по Шекспиру.
{-# LANGUAGE QuasiQuotes #-}
import Text.Blaze.Html.Renderer.String (renderHtml)
import Text.Hamlet
greet name = [shamlet|
$doctype 5
<html>
<head>
<title>Greeting for #{name}
<body>
<h2>
Hello world #{name}|]
main = writeFile "greet.html" $ renderHtml $ greet "John Foo"
greet.html
теперь содержит статически отображаемый HTML-код приветствия.