Haskell之Yesod开发–边踩坑边开发(1)

模版文件读取

开发网站,我们是不可能将所有的页面都写在代码里的,对于前端工程师来说,他们可以写出.html页面。那么我们如何将.html文件读入到代码中呢。

Book的第十五章是有关于外部文件读取的,P187提供了读取文件的方法,即使用widgetFile函数,他会自动读取templates文件夹下的四种文件,那么我们如何使用呢

  1. 安装hledger-web库并加入到.cabal文件中
  2. import Settings
  3. src的同级建立目录templates
  4. templates中增加一个文件,例如homepage.hamlet
  5. 按Book上的方式增加代码
  6. 运行
  7. 补充:需要在代码中开启{-# LANGUAGE TemplateHaskell #-}

模版的模版

如果我们需要将每个页面的Page注入到基础模版中,应该怎么做呢

getHomeR = do
    pc <- widgetToPageContent $(widgetFile  "homepage")
    giveUrlRenderer $(hamletFile "templates/default-layout.hamlet")

homepage.hamlet内容

<h1>Hello Brant!

default-layout.hamlet内容

$doctype 5
<html>
    <head>
    <body>
        <h1>This is template
        ^{pageBody pc}

如果需要动态设置某个参数

getHomeR = do
    let keys = "Fruits"::Text
    PageContent _ _ bodys <- widgetToPageContent $(widgetFile "homepage")
    let title = "Home"::Text
    giveUrlRenderer $(hamletFile "templates/defaule-layout-wrapper.hamlet")

homepage的内容

<h1>Hello Brant!
<ol>#{keys}
    <li>apple
    <li>banana

default-layout-wrapper.hamlet的内容

$doctype 5
<html>
    <head>
        <title>#{title}
    <bodu>
        <h1>This is template
        <h2>#{keys}
        ^{bodys}

也就是说,从widgetFile拿到的文件,通过widgetToPageContent进行了转换。虽然说是构成一个PageContent title headTags bodyTags,但其实titleheadTags并没有什么(luan)用,必须通过手工设置。当然也可以再用另一个widgetFile获取到,只要参照上面的实例,让参数名保持在上下文中即可。切一个关键字可以对应多个XXXFile的上下文–参见keys的用法。至此,我们已经具备了一个小型网站的template结构化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值