hamletFile,luciusFile,julius文件变量不在范围内
问题描述:
我正在使用Yesod构建一个简单的应用程序,并且我很难引入外部文件。这里是我的代码:hamletFile,luciusFile,julius文件变量不在范围内
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
import Yesod
data GomokuServer = GomokuServer
mkYesod "GomokuServer" [parseRoutes|
/HomeR GET
|]
instance Yesod GomokuServer
getHomeR :: Handler Html
getHomeR = defaultLayout $ do
$(hamletFile "./src/templates/home.hamlet")
$(luciusFile "./src/templates/home.lucius")
main :: IO()
main = warp 3000 GomokuServer
它的伟大工程,当我用quasiquotes,或者如果我whamletFile
取代hamletFile
,但否则将无法编译,因为它无法找到hamletFile
或luciusFile
。我使用的是Yesod版本1.4,我认为这些方法是通过核心Yesod包导入的。他们不是?
答
为什么不使用whamletFile
?大多数时候你想要一个小部件。
看来hamletFile
未被再次出口。
λ import Yesod
λ :t hamletFile
<interactive>:1:1: error:
• Variable not in scope: hamletFile
• Perhaps you meant ‘whamletFile’ (imported from Yesod)
如果你真的需要它,你可以把它从Text.Hamlet。
FWIW的Yesod scaffolding定义一个函数
widgetFile :: String -> Q Exp
widgetFile = (if appReloadTemplates compileTimeAppSettings
then widgetFileReload
else widgetFileNoReload)
widgetFileSettings
然后我就用这个处处像$(Settings.widgetFile "homepage")
在默认情况下在小村庄,白斑狗鱼带来的,而卡修斯文件“主页”。你可以看到更多的信息在Overriding-widgetFile on the Yesod wiki
我可以使用'whamletFile'导入外部'.lucius'文件吗?我只是觉得它只能使用'.hamlet'文件。我最终使用Text.Hamlet导入。 –
你不能使用'whamletFile'来导入lucius文件,但是你可以使用'widgetFile'函数来导入所有3个hamlet,lucius和cassius文件。 – Ben
但'widgetFile'不包含在核心yesod库中,对吧?我必须将yesod-scaffold添加到我的依赖列表中,这似乎是一种矫枉过正,考虑到这是我将使用的唯一功能。 –