yesodweb -example和输出中的额外标签

时间:2013-01-18 20:48:12

标签: haskell yesod

请考虑以下三页非常相似的内容。

{-# LANGUAGE OverloadedStrings, TypeFamilies, QuasiQuotes,
         TemplateHaskell, MultiParamTypeClasses #-}
import Yesod
import Control.Applicative
import Data.Text (Text)
import Text.Hamlet

data Example = Example

mkYesod "Example" [parseRoutes|
/ RootR GET
/page PageR GET
/page2 Page2R GET
|]

instance Yesod Example

getRootR :: GHandler sub Example RepHtml
getRootR = do
    defaultLayout [whamlet|
$doctype 5
<html>
   <head>
     <title>Tutorial, hello root
   <body>
     <h1 id="greeting">Hello root
|]


getPageR :: GHandler sub Example RepHtml
getPageR = defaultLayout $ do
    toWidgetHead [hamlet| <meta charset="utf-8"> |]
    setTitle "hello page"
    toWidget [hamlet|
<h1 id="greetings2">Hello page
|]

getPage2R :: GHandler sub Example RepHtml
getPage2R = defaultLayout $ do
    toWidget [hamlet|
$doctype 5
<html>
   <head>
     <title>Tutorial, hello page2
   <body>
     <h1 id="greeting">Hello page2
|]


main :: IO ()
main = warpDebug 3000 Example

RootR和pag​​e2给出相同的输出(我的意思是标签和结构),而“页面”与两者有所不同。输出是,首先是“根”&amp; “第2页”:

<!DOCTYPE html>
<html><head><title></title></head><body><!DOCTYPE html>
<html><head><title>Tutorial, hello page2</title>
</head>
<body><h1 id="greeting">Hello page2</h1>
</body>
</html>
</body></html>

而“page”的输出是

<!DOCTYPE html>
<html><head><title>hello page</title><meta charset="utf-8"> </meta>
</head><body><h1 id="greetings2">Hello page</h1>
</body></html>

为什么会有额外的&amp; -tags in“root”&amp; “第2页”?我应该在代码中添加一些东西还是拿走一些东西?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

default-layout函数已包含doctype等...您将在root和page2中再次添加它。