我有一个Servant应用程序,我想添加一些具有共享主/布局页面的html页面。我应该使用什么html模板库来创建它?我已经看过一些但是没有找到一个是:
或多或少最新
使用外部html文件而不是在haskell代码中描述html布局。这意味着,我不想使用这样的东西
getHomeR = defaultLayout
[whamlet|
<h1>Welcome to the homepage
<p>
Feel free to visit the #
<a href=@{SubsiteR SubHomeR}>subsite
\ as well.
|]
可以轻松插入我的Servant应用程序。但不仅是一个Servant应用程序,以后我可能在其他框架中有Web应用程序,所以我也希望使用那个库。
答案 0 :(得分:1)
Hamlet支持使用外部html模板文件。使用Servant的示例工作代码:
data Person = Person { firstName :: String, lastName :: String }
deriving (Show, Eq, Generic)
instance ToJSON Person
instance ToMarkup [Person] where
toMarkup persons = showPersons persons
preEscapedToMarkup p = showPersons p
people :: [Person]
people =
[ Person "Isaac" "Newton"
, Person "Albert" "Einstein"
]
showPersons :: [Person] -> Html
showPersons p = $(shamletFile "person.hamlet")
type PersonAPI = "persons" :> Get '[HTML] [Person]
-- HTML serialization of a list of persons
personAPI :: Proxy PersonAPI
personAPI = Proxy
server :: Server PersonAPI
server = return people
app :: Application
app = serve personAPI server
serveApp :: IO ()
serveApp = run 8081 app
注意函数shamletFile
。模板文件person.hamlet
中的代码:
<body>
<p>Profile List page
$forall person <- p
<h1>#{firstName person}
包含完整导入和ghc扩展名的整个代码here。