2015年1月18日日曜日

Yesodのhamletテンプレートで変数展開

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>
&lt;div&gt;Kazuto g&lt;/div&gt;
<div>Kazuto g</div>
Ajito

タグのclass属性に出力する場合は、.#で出力しなければならないらしい、変数に保存されているHTMLを出力する場合は、widgetを利用する

Yesodでhamletの気に入ってるところ


皆さんそれぞれだとは思いますが、私として気に入っているところは、終了タグを書くとエラーになるところですかね。
インデントでタグの終了を判断するので初めは「チョット面倒だな」って思ったのですが、HTMLが複雑になってくると逆に見通しがよく、分かりやすい構造になっている事に気づいちゃいます。案外、HTMLってコピペして適当にかかれちゃう時があるので、これくらいの制約があってもいいんじゃないかと思いました。

Hamletって骸骨とかいっぱいで怖い、Yesod楽しいです

0 件のコメント:

コメントを投稿