hamletの変数展開でチョットしたメモ
YesodでHTMLのテンプレートエンジンでhamletを使っているのですが、適当にやり過ぎていたのでチョット真面目に調べてみました、と言ってもたいした量ではないのですが。
こわいな...
Handlerからテンプレートへ変数をアサインする
Handlerでlet式で変数定義したものをテンプレート内で利用する
getHomeR :: Handler Html getHomeR = defaultLayout $ do let cs = ".kazuto .g" :: Text tag = "<div>Kazuto g</div>" :: Text tag2 = [hamlet|<div>Kazuto g|] setTitle "最近キャバクラに..." caba <- setCabaName "jito" $(widgetFile "home") setCabaName :: MonadWidget m => String -> m String setCabaName tailstr = return $ "A" ++ tailstr
そしてテンプレートに変数展開する
<p .#{cs}>Here #{tag} ^{tag2} #{caba}
するとHTMLの出力には最終的にこうなる
<p class=".kazuto .g">Here</p> <div>Kazuto g</div> <div>Kazuto g</div> Ajito
タグのclass属性に出力する場合は、.#で出力しなければならないらしい、変数に保存されているHTMLを出力する場合は、widgetを利用する
Yesodでhamletの気に入ってるところ
皆さんそれぞれだとは思いますが、私として気に入っているところは、終了タグを書くとエラーになるところですかね。
インデントでタグの終了を判断するので初めは「チョット面倒だな」って思ったのですが、HTMLが複雑になってくると逆に見通しがよく、分かりやすい構造になっている事に気づいちゃいます。案外、HTMLってコピペして適当にかかれちゃう時があるので、これくらいの制約があってもいいんじゃないかと思いました。
Hamletって骸骨とかいっぱいで怖い、Yesod楽しいです
0 件のコメント:
コメントを投稿