模版文件读取
开发网站,我们是不可能将所有的页面都写在代码里的,对于前端工程师来说,他们可以写出.html页面。那么我们如何将.html文件读入到代码中呢。
Book的第十五章是有关于外部文件读取的,P187提供了读取文件的方法,即使用widgetFile函数,他会自动读取templates文件夹下的四种文件,那么我们如何使用呢
- 安装
hledger-web库并加入到.cabal文件中 - import Settings
- 在src的同级建立目录templates
- 在templates中增加一个文件,例如homepage.hamlet
- 按Book上的方式增加代码
- 运行
- 补充:需要在代码中开启
{-# 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,但其实title和headTags并没有什么(luan)用,必须通过手工设置。当然也可以再用另一个widgetFile获取到,只要参照上面的实例,让参数名保持在上下文中即可。切一个关键字可以对应多个XXXFile的上下文–参见keys的用法。至此,我们已经具备了一个小型网站的template结构化
882

被折叠的 条评论
为什么被折叠?



