Haskell 链接到来自Hamlet的静态文件

Haskell 链接到来自Hamlet的静态文件,haskell,yesod,Haskell,Yesod,我目前正在按照以下步骤来试验YesSOD 首先,我使用yesod init创建了一个yesod应用程序,并创建了一个根处理程序,用于呈现名为homepage的小部件文件: getRootR = do mu <- maybeAuth defaultLayout $ do h2id <- lift newIdent setTitle "Home" addWidget $(widgetFile "homepage") 现在出现的问题是,我想使用完全相同的代码行将此

我目前正在按照以下步骤来试验YesSOD

首先,我使用
yesod init
创建了一个yesod应用程序,并创建了一个根处理程序,用于呈现名为
homepage
的小部件文件:

getRootR = do
mu <- maybeAuth
defaultLayout $ do
    h2id <- lift newIdent
    setTitle "Home"
    addWidget $(widgetFile "homepage")
现在出现的问题是,我想使用完全相同的代码行将此静态文件包含在我的
主页
小部件中。编译时发生以下错误:

Handler/Root.hs:19:21:
    Not in scope: `img_logo_png'
    In the result of the splice:
      $(widgetFile "homepage")
    To see what the splice expanded to, use -ddump-splices
    In the first argument of `addWidget', namely
      `$(widgetFile "homepage")'
    In the expression: addWidget ($(widgetFile "homepage"))

因此,我的问题是:如何链接使用
widgetFile
定义的小部件中的静态资源,以及为什么它在默认布局模板中的行为不同?

您需要向Handler/Root.hs添加导入:

import Settings.StaticFiles
如果一个哈姆雷特文件需要它,那么调用该哈姆雷特文件的handler.hs文件将需要首先导入它。default-layout.hamlet不需要任何更改的原因是它在我相信的Application.hs中的某个地方被调用,它几乎可以导入所有内容,包括静态内容

import Settings.StaticFiles