Collegamento a un file statico da Hamlet
Domanda
Attualmente sto sperimentando con Yesod seguendo la tutorial sul Wiki Yesod .
Per prima cosa ho creato un'applicazione utilizzando yesod yesod init
, e ha creato un gestore di Root che rende un file chiamato widget di homepage
:
getRootR = do
mu <- maybeAuth
defaultLayout $ do
h2id <- lift newIdent
setTitle "Home"
addWidget $(widgetFile "homepage")
Ho un file immagine nella statica chiamata directory static/img/logo.png
Dopo Settings/staticFiles.hs
toccante, sono riuscito con successo a collegare questo file da default-layout.hamlet
tramite
<img src=@{StaticR img_logo_png}
Il problema si verifica ora che voglio includere questo file statico nel mio widget di homepage
, utilizzando esattamente la stessa riga di codice. Il seguente errore si verifica in compilazione:
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"))
Quindi la mia domanda è: Come faccio a collegare risorse statiche nei widget definiti con widgetFile
, e perché si comportano in modo diverso nel modello di layout di default
Soluzione
È necessario aggiungere un'importazione di Handler / Root.hs:
import Settings.StaticFiles
Se un file borgo richiede quindi a seconda di quale handler.hs file chiamate quel file frazione avranno bisogno di importarlo prima. Il motivo per cui default-layout.hamlet non richiede alcuna modifica è perché è chiamato da qualche parte nel Credo Application.hs che ha le importazioni per quasi tutto, compreso roba statica.